2012-01-27 113 views
2

我想在项目中使用如下定义的hibernate对象。在没有表映射的情况下继承Hibernate对象

@Table(name = "Parent") 
class Parent{ 

    int id; 
    String name; 

} 

@Table(name = "Child") 
class Child extends Parent{ 
    String schoolNo; 
} 

但是在数据库中; 这两张表没有关系。

父表的列是; ID,名称

子表列是; ID,名称和schoolNo

如果我使用

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 

当我发送一个查询父对象,冬眠的小孩和父母表使用UNION但我想只从父表中选择。

如果我用

@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 

休眠想要一个鉴别列。

我需要hibernate发送每个类的选择查询到它的表。

此致敬礼。

+0

为什么在表之间没有关系时定义继承策略? – Perception 2012-01-27 13:16:56

+0

我明白你对一个愚蠢的建筑的想法。其实这些都不是桌子。这些视图产生了很多表组合。相同的字段,但数据来自真正不同的表格。实际上,对于开发人员而言,结果对象是相同的,但有一点区别我希望解释清楚。 – 2012-01-27 13:24:22

+0

你有没有试过只使用@Inheritance? – 2012-01-27 14:39:14

回答

2

TABLE_PER_CLASS这里是正确的策略。

Hibernate在两个表上生成一个联合查询,但这应该仍然有效,这很奇怪。在错误表上的子查询不会找到任何东西,所以结果是正确的。这听起来像是Hibernate的子类查询生成中的一个错误。

+0

看起来像真,但“不会找到任何东西”并不是真的,正如我之前所说,这些是视图,并使用一些共享表进行查询,我试着从两个表中真正列出值。 – 2012-01-30 07:01:40

+0

只有当父母和孩子都使用相同的ID时,情况才会如此。情况并非如此。这是否发生? – 2012-01-30 13:25:22

+0

不幸的是 – 2012-01-30 14:44:50

0

在类似的情况下,我在父表上使用@Inheritance(strategy = InheritanceType.JOINED)

见在Hibernate文档的详细信息:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e1168

+0

如果我使用JOINED策略,hibernate生成的SQL显示为“Select * from Parent,Child其中Parent.id = Child.id(+),但我只需要”从*选择子*“或仅从”父*选择*“ – 2012-01-27 15:47:59