【发布时间】:2016-05-26 07:24:58
【问题描述】:
我必须在两个实体之间建立一对一的关联,但其中一个实体必须有两个@Id。一个是PRI,另一个是MUL。我必须如何声明复合 ID,以及如何映射类?
@Entity
@Table(name = "PERSONS")
public class Person implements Serializable{
private static final long serialVersionUID = -3451407520028311143L;
@Id
@Column(name = "ID")
private Integer id;
@Column(name = "ADDRESS_ID")
private Integer addressId;
@Column(name ="NAME")
private String name;
@OneToOne(mappedBy= "person", cascade= CascadeType.ALL)
private Address address;
...
}
第二类通过@IdClass注解映射
@Entity
@Table ( name = "ADDRESS" )
@IdClass(AddressKeys.class)
public class Address implements Serializable {
@Id
@Column ( name = "ID")
private Integer id;
@Id
@Column ( name = "PERSON_ID")
private Integer idPerson;
@Column ( name = "CITY" )
private String city;
@OneToOne(cascade= CascadeType.ALL)
@JoinColumn(name="PERSON_ID")
private Person person;
...
}
和 id 类
class AddressKeys implements Serializable{
private Integer id;
private Integer idPerson;
//getters and setters
@Override
public int hashCode() {
...
return result;
}
@Override
public boolean equals(Object obj) {
...
}
}
所以当我尝试创建和保存记录时,我遇到了下一个错误
无法在实体映射中打开 sessionRepeated 列: hibernateMappedModels.base1.mappedClasses.oneToOne.Address 列: PERSON_ID(应该用 insert="false" update="false" 映射) java.lang.NullPointerException 在 hibernateMappedModels.base1.Main.run(Main.java:45) 在 hibernateMappedModels.base1.Main.main(Main.java:24
我尝试使 Id 字段不可插入和不可更新,它正在工作,但我需要它们是可插入和可更新的;有没有可能做到这一点?
【问题讨论】:
标签: java hibernate jpa annotations