针对每个实体所涉及到的具体属性不同的特点,比如一个商品类中,书本有页数属性,DVD有区码属性,如果针对不同的对象建一张独立的表
不行。可以把不同对象相同的地方归类到一个公共类,然后用Table per subclass来处理,具体如下
针对不同对象不同属性先分别建不同对象特有属性的子表,字段只是特有属性就OK
然后在公共类的映射文件中用<joined-subclass
name="子类具体路径"
table="对应子表">
<key column="id"/>
<property name="pageCount"
column="pagecount">
</joined-subclass>
然后写如下测试代码:
TBook book=new TBook();
book.setpagecount(23);
book.setName("NO excuse");
TDvd dvd=new TDvd();
dve.setName(spain man );
dve.setRegioncode(6);
try{
Transaction tx=session.beginTransaction();
session.save(book);
session.save(dvd);
tx.commit();
}
catch(HibarnateException e)
{
......
}
不过有一种更好的区别子类的方法
在主表中增加一个Category字段用来标示字类,
假如category=1表示的是书
category=2表示的DVD
那么在Hibernate 映射文件中的discriminator节点,则可以定义根据category自动识别对应的class类型的功能。
注意。是自动的,以下代码你就知道了。
在TItem.hbm.xml
<hibernate-mapping>
<class name="item类的具体路径 table="T_ITEM">
<id name="id" column="id">
<generator class="native"/>
</id>
<discriminator column="category" type="string"/ >
<property name="name" column="name">
<property 其他公共部分的属性>
<subclass name="字类的具体路径(注意是个真实的类)" discriminator-value="1">
<property name="pageCount" column="pagecount"/><!--对应的字类特殊字段,也就是说这个是我字类特有的属性了-->
</subclass>
<subclass name="字类的具体路径" discriminator-value="2">
<property name="Code" column="code"/>
</subclass>
</hibernate-mapping>
这样,在运行Hibernate读取T_ITEM表数据时,会根据指定的category来进行判断,如果category字段值为1,则映射到
TBook。如果是2则把数据映射到TDVD生成实例对象。
然后看下测试类
List list =session.createQuery("from TBook").list();
Iterator it=list.iterator();
while(it.hasNext())
{
TBook book=(TBook)it.next();
System.out.println(book.getName());
}
输出来的真的是book里面的Name哦。。。这种方法近似于父类和其子类映射的解决之道,既一个大类对应有一个大表
,大表有些属性是字类特有的,通过category来识别加载子类。
分享到:
相关推荐
Hibernate提升性能Hibernate提升性能Hibernate提升性能Hibernate提升性能
设计好的hibernate与设计不好的hibernate性能差别巨大,如何改善hibernate的性能是合理使用hibernate的关键
Hibernate性能优化Hibernate性能优化Hibernate性能优化Hibernate性能优化Hibernate性能优化
[Hibernate雨夜的寂寞原创教程].Hibernate 关于Hibernate的一个实用小例子,适用初学者
Hibernate3性能优化Hibernate3性能优化Hibernate3性能优化Hibernate3性能优化
hibernate_性能优化
的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...
Hibernate性能调优
珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手
Hibernate实体层设计.rar hibernate就是一个面向对象的一个框架
hibernate分页Hibernate 分页的设计和编码
hibernate数据库访问接口设计
Hibernate性能优化策略.详细描述了java性能优化的各种策略高清
Hibernate性能优化研究.pdf..............
详见博客 http://blog.csdn.net/hanlin0605/article/details/54834717
中取出的记录条数,一般设置为30、50、100.Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能会有明显提升,如果继续增大,超出100,性能提升不明显,反而会消耗内存。 即在...
Hibernate缓存,性能优化
用HIBERNATE开发留言板系统的设计概要