대다수가 외래 키를 업데이트하지 않는 일대 다 관계 사이의 양방향 매핑에 문제가 있습니다. 업데이트/생성을 수행 할 때 null이 유지됩니다.Dropwizard Hibernate 1.0.0
@Entity
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value = "P")
public abstract class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "person")
private Collection<Availability> availabilities;
이 원인이 될 수있는 몇 가지가 있습니다,하지만 난 확신 해요 :
@Entity
@Table(name = "availability")
public class Availability implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PERSON_ID", nullable = false)
private Person person;
두 번째는 하나입니다 : 두 가지 엔티티, 첫 번째 (많은)이되어 있습니다 진짜 이유가 무엇인지. 첫 번째는 사람이 추상적이라는 것입니다. 그러나 내가 사용하는 상속 유형이이 문제를 일으키지 않아야합니다.
두 번째 방법은 하나의 트랜잭션에서 엔티티를 유지하려고합니다. 나는 dropwizard의 @UnitOfWork를 사용하고 있습니다. 내 DAO는 다음을 수행하고 있습니다.
public Staff update(Staff staff) {
return persist(staff);
}
이 시점의 직원은 ID를 가지고 있지 않습니다. 가용성이 단순히 다음 호출, 후드에서
(또한 아이디없이) 사람에 설정됩니다
protected E persist(E entity) throws HibernateException {
currentSession().saveOrUpdate(requireNonNull(entity));
return entity;
}
내가 새 트랜잭션을 열려면 세션 관리자를 사용하는 경우, 영속화 사람에게 얻을 이드 백, 가용성을 설정 한 다음 변경된 가용성을 가진 사람과 업데이트를 수행합니까? 그것은 나에게 잘못된 것처럼 보입니다.