我目前有数据库和休眠映射。有一个中央表和相应的实体(PersistentObject)。其他许多表和实体通过PersistentObject@ManyToOne映射引用@OneToOne

现在,我想使当前的PersistentObject抽象,并引入两个从Sub1Object继承的子类Sub2ObjectPeristentObject

我无法更改存储PersistentObject的表,否则可以添加新表等。该表包含足够的信息,因此我可以根据需要使用例如@DiscriminatorColumn分隔Sub1ObjectSub2Object行。

是否可以进行此更改,以使我当前的HQL查询无需修改就可以正常工作?我有很多查询,例如from PersistentObject where foo = ?from OtherEntity other where other.persistentObject = ?。我希望这些查询开始返回具体的子类而不是超类。我不想为Sub1ObjectSub2Object编写单独的查询。

这是可能吗?我应该使用哪种继承策略?

最佳答案

您必须使用每个类的表层次结构策略,因为您要使用鉴别符列:)
对于我来说,休眠应该可以与您所描述的完全一样。将子类映射为可识别hiberante的类并提供适当的区分符就足够了。

只是警告一下,有时instanceof指令将不起作用,因为您将获得代理对象,但是可以使用Hibernate.getClass(Obj ...)进行检查。

10-08 11:20