一旦你看到我在代码块中发布的复合键和使用它们的实体,请参考我需要在数据库中为地址实体提供的下一个伪表:
地址表:
ADDRESS
-------------------------------
DOCUMENTTYPE INT2 PK
DOCUMENTNR VARCHAR(10) PK
ALIAS VARCHAR(20) PK
FULLADDRESS VARCHAR(100)
...
实体和复合键:
@Embeddable
public class Document implements Serializable {
private DocumentType documentType;
private String documentNr;
...
@Entity
@IdClass(Document.class)
public class Person {
@Id
private DocumentType documentType;
@Id
private String documentNr;
private String fullName;
...
@Embeddable
public class AddressId implements Serializable {
private DocumentType documentType;
private String documentNr;
private String alias;
...
@Entity
@IdClass(AddressId.class)
public class Address {
@Id
@ManyToOne
private Person person;
@Id
private String alias;
private String fullAddress;
...
注意: DocumentType是一个enum。
好吧,我正在尝试为Address实体进行映射,但它不起作用,我不知道为什么。它一直说(EclipseLink)我有名称和类型不匹配的问题。我不明白为什么如果AddressId IdClass 没有别名属性(当然也没有Address实体),那么它就像一个魅力,以及完整的AddressId IdClass(具有别名属性)但使用 EmbeddedId . 我需要的是像我发布的那样拥有地址实体。
映射错误在哪里?
先感谢您!