使用相同的数据透视表对具有子类的多对多进行hibernate
拥有此模型架构:
Person |__ Student |__ SchoolBoy |__ CollegeStudent
我正在使用Hibernate 3.6并使用tperson表为所有类使用了一个鉴别器列。 我的映射是这样完成的:
现在我想介绍课程实体,实现课程与学生之间的关系。 当然,这是一种多对多的关系。 假设我使用名为tstudent_course的数据透视表,其中包含SchoolBoy和CollegeStudent两种类型的学生。 该表包含对该人本身及其正在学习的课程的参考。
现在,我想在加载课程实体时,大学生和学生之间存在差异。 我这样做:
但是,作为数据透视表的一个表,其中包含对每种类型学生的引用,它会尝试加载我的集合中的每个学生,然后我收到下一个exception:
Object with id: 2 was not of the specified subclass: CollegeStudent (loaded object was of wrong class class SchoolBoy)
似乎Hibernate正在进行连接而没有评估我的学生的具体类型,并试图在我的大学生集合中注入一个SchoolBoy。
我该怎么做才能避免这种情况? 是否有可能在枢轴表中建立一种歧视? 或者我是否必须为每种子类创建特定的数据透视表?
在您的集合中,您可以添加filter:
恕我直言,没有那个filter(只是一组所有学生),映射会更好。
- HQL(Hibernate)如何检查元素列表是否是另一个列表的子集?
- 使用Hibernate延迟获取单列(类属性)
- Java 9,Hibernate和java.sql / javax.transaction
- 正在加载javassist-ed Hibernate实体
- 如何修复错误:“INFO:HHH000206:找不到hibernate.properties”?
- Hibernate:如何覆盖映射超类的属性
- 如何在Hibernate中进行SELECT查询包括子查询COUNT(*)
- org.dbunit.dataset.NoSuchTableException:未在架构’null’中找到表’xxx’
- 使用Oracle 10g中的Hibernate将数据保存到Clob中