我使用spring jpa + hibernate连接到包含2个表的Oracle DB:CustomersLegacyCustomers
Customers通过添加一些其他列来扩展LegacyCustomers

@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关系的方法,但要避免在查询超类表(LegacyCustomers)时hibernate创建的多态性。查询LegacyCustomers时如何告诉hibernate仅使用超类中的列?

不幸的是,@Polymorphism注释建议here没有帮助。

谢谢您的帮助

最佳答案

为了实现您的目标,您需要使用@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 {

}

并且Customers实体执行相同的操作:
@Entity
@Table(name="Customers")
public class Customers extends BaseCustomers {
    @Column(name="NewId") private String newId;
    @Column(name="PhoneNumber") private String phoneNumber;
}

而已。

08-17 22:28