Java 使用JPA和Hibernate时如何避免超类查询中的多态性

Java 使用JPA和Hibernate时如何避免超类查询中的多态性,java,hibernate,jpa,inheritance,entity,Java,Hibernate,Jpa,Inheritance,Entity,我使用SpringJPA+hibernate连接到带有两个表的Oracle数据库:Customers和LegacyCustomers Customers通过添加一些附加的列来扩展legacycourses @Entity @Table(name="Customers") public class Customers extends LegacyCustomers { @Column(name="NewId") private String newId; @Column(name=

我使用SpringJPA+hibernate连接到带有两个表的Oracle数据库:
Customers
LegacyCustomers

Customers
通过添加一些附加的列来扩展
legacycourses

@Entity
@Table(name="Customers")
public class Customers extends LegacyCustomers {
    @Column(name="NewId") private String newId;
    @Column(name="PhoneNumber") private String phoneNumber;
}

@Entity
@Table(name="LegacyCustomers")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class LegacyCustomers {
    @Column(name="OldId") private String oldId;
    @Column(name="Name") private String name;
    @Column(name="Address") private String address;
} 
然而,它们是完全不同的表。我正在寻找一种用java表达关系的方法,但要避免hibernate在查询超类表(
LegacyCustomers
)时创建的多态性。当我查询
LegacyCustomers
时,如何告诉hibernate只使用超类中的列

不幸的是,建议的
@polymorphics
注释没有帮助


感谢您的帮助

为了实现您的目标,您需要使用
@MappedSuperclass
注释来替换一个新的
BaseCustomers
类,该类封装了常见属性:

@MappedSuperclass
public class BaseCustomers {
    @Column(name="OldId") private String oldId;
    @Column(name="Name") private String name;
    @Column(name="Address") private String address;
}
之后,
LegacyCustomers
只是扩展了
BaseCustomers
,并且只添加了
@Entity
注释,因为
BaseCustomers
不被视为一个实体:

@Entity
@Table(name="LegacyCustomers")
public class LegacyCustomers extends BaseCustomers {

}
客户
实体也会这样做:

@Entity
@Table(name="Customers")
public class Customers extends BaseCustomers {
    @Column(name="NewId") private String newId;
    @Column(name="PhoneNumber") private String phoneNumber;
}

就是这样。

子类
客户
上的
@polymorphics(type=PolymorphismType.EXPLICIT)注释可能存在重复。
效果很好。您到底想实现什么?是否不希望从Customers表中获得结果?