Orm 帮助在JPA2.0中映射复合外键
我是JPA的新手,我正在尝试映射一个遗留数据库。文件单独正确加载,但关系无法正常工作。任何帮助都将不胜感激 JavaOrm 帮助在JPA2.0中映射复合外键,orm,jpa,Orm,Jpa,我是JPA的新手,我正在尝试映射一个遗留数据库。文件单独正确加载,但关系无法正常工作。任何帮助都将不胜感激 Java @Entity @IdClass(ParentKey.class) public class Parent { @Id @Column(name="code") private String code; @Id @Column(name="id") private int id; @OneToMany(mappedBy=
@Entity
@IdClass(ParentKey.class)
public class Parent {
@Id
@Column(name="code")
private String code;
@Id
@Column(name="id")
private int id;
@OneToMany(mappedBy="parent")
private List<Child> children = new ArrayList<Child>();
}
public class ParentKey {
private String code;
private int id;
}
@Entity
@IdClass(ChildKey.class)
public class Child {
@Id
@JoinColumns({
@JoinColumn(name="code")
@JoinColumn(name="id")
})
private Parent parent;
@Id
@Column(name="index")
private int index;
}
public class ChildKey {
private String code;
private int id;
private int index;
}
编辑1:
添加ChildKey和ParentKey类。这里是指向复合标识1-N关系的DataNucleus文档的链接。可能有助于您确定问题所在。首先,您没有在Child上定义IdClass
以下是OpenJPA使用其反向映射工具创建的内容,它似乎工作正常
@Entity
@Table(name="PARENT")
@IdClass(ParentId.class)
public class Parent {
@OneToMany(targetEntity=Child.class, mappedBy="parent", cascade=CascadeType.MERGE)
private Set childs = new HashSet();
@Id
@Column(length=4)
private String code;
@Id
private int id;
//omitted getters, setters
}
public class ParentId implements Serializable {
public String code;
public int id;
//omitted getters, setters, toString, equals, hashcode
}
@Entity
@Table(name="CHILD")
@IdClass(ChildId.class)
public class Child {
@Id
@Column(length=4)
private String code;
@Id
private int id;
@Id
private int index;
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
@JoinColumns({@JoinColumn(name="code"), @JoinColumn(name="id")})
private Parent parent;
//omitted getters, setters
}
public class ChildId implements Serializable {
public String code;
public int id;
public int index;
//omitted getters, setters, toString, equals, hashcode
}
另见
(将@Id添加到@manytone字段)我第一次忘记将@IdClass添加到我的示例中,但现在已经更正了。感谢您的链接,但它没有包含外键的主键示例。我需要一个更复杂的例子来表示上面例子中给出的关系。是的。Address.PK将帐户作为其PK的一部分。您的ChildKey不正确您是正确的;我读的时候没有看到。我最终使用了OpenJPA的反向映射工具,它为我提供了解决方案。谢谢你的帮助。
@Entity
@Table(name="PARENT")
@IdClass(ParentId.class)
public class Parent {
@OneToMany(targetEntity=Child.class, mappedBy="parent", cascade=CascadeType.MERGE)
private Set childs = new HashSet();
@Id
@Column(length=4)
private String code;
@Id
private int id;
//omitted getters, setters
}
public class ParentId implements Serializable {
public String code;
public int id;
//omitted getters, setters, toString, equals, hashcode
}
@Entity
@Table(name="CHILD")
@IdClass(ChildId.class)
public class Child {
@Id
@Column(length=4)
private String code;
@Id
private int id;
@Id
private int index;
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
@JoinColumns({@JoinColumn(name="code"), @JoinColumn(name="id")})
private Parent parent;
//omitted getters, setters
}
public class ChildId implements Serializable {
public String code;
public int id;
public int index;
//omitted getters, setters, toString, equals, hashcode
}