<分区>
我正在尝试创建一个复合主键映射,但没有成功。
先决条件是:
- 关系可能是
@IdClass
注解 - 我需要与人实体的关系是
@ManyToOne
我的代码:
@Entity
@IdClass(PhonePK.class)
public class Phone implements Serializable{
@Id
@Column(name = "codigo", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long code;
@Id
@ManyToOne
@JoinColumn(name = "person", referencedColumnName = "code", nullable = false)
private Person person;
@Basic
@Column(name = "number", nullable = false)
private Integer number;
//getters and setters
//equals and hashcode
}
public class PhonePK implements Serializable {
private Long code;
private Long person;
public PhonePK(){}
public PhonePK(Long code, Long person) {
this.code = code;
this.person = person;
}
//getters and setters
//equals and hashcode
}
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "code", nullable = false)
private Long code;
//getters and setters
//equals and hashcode
}
他们以我努力坚持的方式:
//a lot of code
//em = Entitymanager
em.persist(person);
phone.setPerson(person);
em.persist(phone);
我收到的错误是:
Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: No part of a composite identifier may be null