Я использую Hibernate с JPA и имею такое отношение:
@Entity
@Table(name = "first")
public class First {
...
@OneToMany(mappedBy = "first")
private List<Availability> availabilities;
...
}
@Entity
@Table(name = "second")
public class Second {
...
@OneToMany(mappedBy = "second")
private List<Availability> availabilities;
...
}
@Entity
@Table(name="availability")
public class Availability implements Serializable {
@Id
@ManyToOne
@JoinColumn(name = "first_id")
private First first;
@Id
@ManyToOne
@JoinColumn(name = "second_id")
private Second second;
@Column(name = "availability")
private Integer availability;
...
hashcode and equals
}
Я хочу управлять этими тремя объектами отдельно. Первый и второй работают нормально, но когда я пытаюсь объединить(), третий postgresql получает нулевое значение вместо идентификатора, и возникает исключение нарушения ограничения. Почему? Могу ли я даже использовать слияние для этой сущности, чтобы добавить новые строки в таблицу?
update: слияние выглядит примерно так:
public Availability setAvailability(Availability a) {
return em.merge(a);
}
где доступность десериализована из внешнего интерфейса (просто говоря, в нем отделены коллекции «ключевых» классов).