使用相同的数据透视表对具有子类的多对多进行hibernate

拥有此模型架构:

Person |__ Student |__ SchoolBoy |__ CollegeStudent 

我正在使用Hibernate 3.6并使用tperson表为所有类使用了一个鉴别器列。 我的映射是这样完成的:

                    

现在我想介绍课程实体,实现课程与学生之间的关系。 当然,这是一种多对多的关系。 假设我使用名为tstudent_course的数据透视表,其中包含SchoolBoyCollegeStudent两种类型的学生。 该表包含对该人本身及其正在学习的课程的参考。

现在,我想在加载课程实体时,大学生和学生之间存在差异。 我这样做:

                 

但是,作为数据透视表的一个表,其中包含对每种类型学生的引用,它会尝试加载我的集合中的每个学生,然后我收到下一个exception:

 Object with id: 2 was not of the specified subclass: CollegeStudent (loaded object was of wrong class class SchoolBoy) 

似乎Hibernate正在进行连接而没有评估我的学生的具体类型,并试图在我的大学生集合中注入一个SchoolBoy。

我该怎么做才能避免这种情况? 是否有可能在枢轴表中建立一种歧视? 或者我是否必须为每种子类创建特定的数据透视表?

在您的集合中,您可以添加filter:

         

恕我直言,没有那个filter(只是一组所有学生),映射会更好。