继承映射,采取joined-classes的方式,即公共信息存在父表里,数据库共有animal, cat, dog三张表:
@Entity class Animal{...}
@Entity class Cat extends Animal{...}
@Entity class Dog extends Animal{...}
如果执行下面的查询:
HQL(Criteria) : "from Animal where..."
会生成
select ... from animal
left outer join cat on ...
left outer join dog on...
当子表太多的时候,这样的查询效率太低,而实际上我也只需要animal表里的信息,我想让它执行select ... from animal where...,这样就可以了。该怎么配置呢?
现在网上通用的一些答案:
1. @Polymorphism(type=PolymorphismType.EXPLICIT)
这种方法关闭多态查询好像只针对"每个具体的子类一张表"的结构,joined-classes不起作用。
2. 直接写sql不知道可不可以,但是这个方案是末选的了,比如我想得到我家里所有动物的列表,如果能通过配置解决这个问题,那么一条语句通过关联映射就可以得到结果了,用sql就麻烦了。
所以请教大神们,Polymorphism不起作用的情况下,怎么能关闭多态查询吗?
你好,你能给我发一份hibernate4.3.5的资源吗?yang_shuang163@163.com谢谢!
资源是指啥?
@琴剑飘零: 就是hibernate4.3.5的官方源代码 就是jar包
@琴剑飘零: 谢啦
@YOYOYS: 看源码就直接clone github上的看呗,https://github.com/hibernate/hibernate-orm,切换到4.3的branch,或者在项目里用maven之类的工具引hibernate的包:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>