Java 不带表映射的Hibernate对象上的继承

Java 不带表映射的Hibernate对象上的继承,java,hibernate,inheritance,jpa,Java,Hibernate,Inheritance,Jpa,我想在项目中使用hibernate对象,定义如下 @Table(name = "Parent") class Parent{ int id; String name; } @Table(name = "Child") class Child extends Parent{ String schoolNo; } 但是在数据库中; 这两张表没有关系 父表列为;身份证,姓名 子表列为;身份证、姓名和学号 如果我使用 @Inheritance(strategy=In

我想在项目中使用hibernate对象,定义如下

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

     int id;
     String name;

}

@Table(name = "Child")
class Child extends Parent{
     String schoolNo;
}
但是在数据库中; 这两张表没有关系

父表列为;身份证,姓名

子表列为;身份证、姓名和学号

如果我使用

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
当我发送父对象的查询时,hibernate在子表和父表上使用UNION,但我只想从父表中进行选择

如果我使用

@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
hibernate需要一个鉴别器列

我需要hibernate将每个类的select查询发送到它的表中


致以最诚挚的问候。

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


请参阅Hibernate文档中的更多信息:

表中的每个类都是正确的策略


Hibernate对这两个表都生成联合查询,这很奇怪,但这仍然可以工作。错误表上的子查询将找不到任何内容,因此结果将是正确的。这听起来像是Hibernate对子类的查询生成中的一个bug。

当表之间没有关系时,为什么要定义继承策略?我理解你关于愚蠢架构的想法。其实这些都不是桌子。这些视图由许多表组合生成。相同的字段,但数据来自真正不同的表。实际上,结果对象对于开发人员来说是相同的,只是有一点不同。我希望解释清楚。你试过不使用@heritation吗?“不使用”?的行为与单表策略相同如何:不要让Child成为Parent的子类。相反,制作一个它们都实现的接口;Hibernate将完全忽略该关系,类似于“new Child()instanceof ParentInterface”的操作将起作用。如果我使用联接策略,Hibernate生成的SQL将显示为“从父项选择*,子项其中父项id=子项id(+),但我只需要“从子项选择*”或“从父项选择*”,看起来像是真的,但什么也找不到“事实并非如此。正如我之前所说的,这些是视图,使用一些共享表进行查询,我尝试并实际列出了两个表中的值。只有父表和子表都使用相同的ID时,才会出现这种情况。情况不应该如此。那是真的吗?那我想你可能运气不好。您的数据模型根本不描述继承关系。没有正确的方法将继承关系映射到它上面。事实上,我需要的是这个。在java对象而不是数据模型上的继承中,您不能拥有它。你必须找到另一种方法来解决这个问题。