我想将一个类映射到一个表,将子类映射到另一个表。我不确定你是否能以正确的方式做到这一点。到目前为止我试过这个:
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "MyTable1")
public class MyClass
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "MyTable2")
public class MySubclass extends MyClass
它有效,但在生成的SQL中,两个表都已连接,我想将它们分开。
另一种方法是使用与上面相同的方法,但将JOINED更改为TABLE_PER_CLASS。这不起作用,因为当我查询 MyClass 时,SQL中的两个表都有UNION ALL。
我还尝试使用@org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
和@org.hibernate.annotations.Entity(polymorphism = PolymorphismType.IMPLICIT)
,但没有效果。
所以我的问题是,是否有办法在Hibernate中映射它。有什么建议吗?
谢谢!
使用Hibernate 3.6.1
答案 0 :(得分:4)
您似乎想要将这两个实体视为完全无关,除了它们共有的字段。它不是真正的继承关系,因为当您搜索MyClass时,您不希望找到MySubclass实例,尽管MySubClass实例是您设计中的MyClass实例。
因此,最佳解决方案可能是使用包含公共字段和方法的MappedSuperclass
(参见第2.2.4.4章),并创建两个完全独立的实体来扩展此映射的超类。
答案 1 :(得分:0)
TABLE_PER_CLASS
应该做你想做的事。
请注意,当您执行from MyClass m
之类的查询时,Hibernate会加载类MyClass
的所有对象,包括子类,因此会加载UNION ALL
子句。如果您只需要MyClass
没有子类,则需要使用以下查询:from MyClass m where m.class = MyClass
。