으로 목록에 새 항목을 추가하려면 어떻게 난 2 개 테이블. 하나는 직원이라고하고 다른 하나는 전화라고하며 직원은 여러 개의 전화를 가질 수 있습니다.JPA는 : 나는 OneToMany 주석
직원 클래스 :
@Entity
@Table(name = "employee")
public class Employee {
@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private Integer id;
@Column(name = "name", unique = true, nullable = false, length = 25)
private String name;
@OneToMany(mappedBy="owner", fetch= FetchType.EAGER, orphanRemoval=true, cascade={CascadeType.ALL})
private List<Phone> phones;
전화 클래스 :
@Entity
@Table(name = "phone")
public class Phone {
@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = javax.persistence.GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "employee_id")
private Employee owner;
@Column(name = "phone_type", nullable = false, length = 25)
private String phoneType;
@Column(name = "phone_number", nullable = false, length = 25)
private String phoneNumber;
은 가정하자 내가 기존 직원에게 전화를 추가 할. 나는이 일을하고있다 :
Phone phone = new Phone();
phone.setOwner(employee);
phone.setPhoneNumber("999-555-0001");
phone.setPhoneType("home");
employee.getPhones().add(phone);
dao.merge(employee); // Is it possible to get this to both persist new phones and update existing phones that were changed?
나는 phoneSet의 전화 중 일부는 이미 지속 된 점을 감안 새로운 휴대폰을 병합하는 방법을 모르겠어요. 각 전화를 수동으로 유지해야합니까? 예를 들어 주시면 감사하겠습니다. 계단식으로 들여다 보았지만 제대로 작동하지 않는 것 같습니다. 받은 오류 : java.lang.IllegalStateException : 엔터티 복사본이 이미 다른 엔터티에 할당되었습니다.
오류가 있습니까? 게시 할 수 있습니까? 또한 필자는 필요한 각 필드에 대한 getter 및 setter 메서드를 생략했다고 가정합니다. 당신이 어떤 @Transactional이 곳이 있습니까 계단식에 대한 –
은 @OneToMany 주석 – willome
에 [캐스케이드 = CascadeType.ALL, orphanRemoval = TRUE]을 추가? – willome