我有两个类参与继承。
BaseEntity creates a record in enrg table.
Website creates a record in ws table.
这很好用。现在,我想向网站添加与其他实体共同的属性。我不想把它们直接放在网站实体上,因为这有很多重复。同时,这些属性并不是所有实体都通用的,所以我也不想将它们添加到BaseEntity中。
我创建了一个新的类PublishableEntity
,在其中添加了这些属性。现在,我正试图以这样一种方式绘制网站地图,即
BaseEntity creates a record in enrg table.
PublishableEntity creates a record in pbdt table.
Website creates a record in ws table.
在下面的代码中,PublishableEntity被完全忽略了。我没有看到任何错误。Hibernate似乎甚至没有获取映射。
类别
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="entp", discriminatorType=DiscriminatorType.STRING)
@Table(name="enrg")
public abstract class BaseEntity implements Serializable {
@SecondaryTable(name="pbdt", pkJoinColumns=@PrimaryKeyJoinColumn(name="enid", referencedColumnName="enid"))
public abstract class PublishableEntity extends BaseEntity {
@Entity
@DiscriminatorValue("ws")
@Table(name="ws")
public class Website extends PublishableEntity {
JPA提供程序只扫描用@Entity
、@Embeddable
或@MappedSuperclass
注释的类。
您也可能错过了辅助表的要点。辅助表指示实体的一部分存储在第二个表中。例如:
@Entity
@SecondaryTable(name="ADDRESS",pkJoinColumns=@PrimaryKeyJoinColumn(name="EMP_ID"))
public class Employee {
@Id int id; // stored in table EMPLOYEE
@Column(table="ADDRESS")
String city; // stored in table ADDRESS
}
您的目标可能是能够将地址识别为一种类型。为此,您可以创建一个可嵌入的
@Embeddable
public class Address {
String city;
}
将映射到Employee中的另一个表。city
属性将被替换
@Embedded
@AttributeOverrides({
@AttributeOverride(name="city", column=@Column(table="ADDRESS"))
})
Address address;
在您的特定情况下,PublishableEntity
可能会成为可嵌入的。