我遇到了hibernate的显式多态性问题。我使用了多态性注释并将其设置为显式,但是在映射类中使用get()和集合我总是得到所有子类。我在hibernate“show_sql”输出中看到所有带左连接的子类。 有什么问题?我是否理解文档错误?或者它是hibernate 4中的一个错误?我还没有看到任何关于hibernate 4和多态注释的例子。
sessionFactory.getCurrentSession().get(Node.class, 111); // return subclasses!
@Entity
@Table(name="Nodes")
@Inheritance(strategy = InheritanceType.JOINED)
@Polymorphism(type= PolymorphismType.EXPLICIT)
public class Node implements Serializable {
...
}
@Entity
@Table(name="Persons")
public class Person extends Node {
}
@Entity
@Table(name="Networks")
public class Network extends Node {
}
...and other subclasses...
答案 0 :(得分:4)
这是一个常见的错误理解,我也有过同样的怀疑......
这是显式多态性中真正发生的事情。
polymorphism explicit仅适用于根实体并阻止 命名(未映射的)超类以返回映射的子实体
在您的情况下,如果未映射实体类节点且人员为 如果显式多态,则节点不会返回人员 元素强>
看看这段代码..
@Entity
@Table(name="Nodes")
@Inheritance(strategy = InheritanceType.JOINED)
public class Node implements Serializable {
...
}
@Entity
@Polymorphism(type= PolymorphismType.EXPLICIT)
@Table(name="Persons")
public class Person extends Node {
}
@Entity
@Polymorphism(type= PolymorphismType.EXPLICIT)
@Table(name="Networks")
public class Network extends Node {
}
它基本上与每个人心中的相反。!!
答案 1 :(得分:1)