У меня следующая ситуация:
OrganisationEntity.java
@Entity
@Table(name = "organisation")
public class OrganisationEntity {
// ...
private PersonEntity contactPerson;
// ...
@OneToOne
@JoinColumn(name = "contact_person_id", referencedColumnName = "id", nullable = false)
public PersonEntity getContactPerson() {
return contactPerson;
}
public void setContactPerson(PersonEntity contactPerson) {
this.contactPerson = contactPerson;
}
// ...
}
ContactPerson.java
@Entity
@Table(name = "person")
public class PersonEntity {
private int id;
// ...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
// ...
}
В базе данных таблицы Organisation имеется необнуляемый внешний ключ Person.Отображение сущностей является однонаправленным. Новое, когда я хочу сохранить новую пару записей (одна организация и один человек) с merge
на OrganisationEntity
. Я получаю следующую ошибку:
17: 10: 19.827 ПРЕДУПРЕЖДЕНИЕ [http-nio-8080-exec-2] [org.hibernate.action.internal.UnresolvedEntityInsertActions] [144] HHH000437: Попытка сохранить одну или несколько сущностей, которые имеют ненулевую связь с несохраненным переходным процессомюридическое лицо.Несохраненный переходный объект должен быть сохранен в операции до сохранения этих зависимых объектов.
Несохраненный переходный объект: ([ch.freiwilligenarbeit_sempach.entity.PersonEntity # 0])
Зависимые объекты: ([[ch.freiwilligenarbeit_sempach.entity.OrganisationEntity #]])
Необнуляемые ассоциации: ([ch.freiwilligenarbeit_sempach.entity.OrganisationEntity.contactPerson])
1026имеет смысл для меня, так как он пытается вставить организацию без ссылки на человека вообще.Поэтому я обычно определяю каскадное поведение, чтобы спящий режим сначала вставлял человека, устанавливал ссылку на организацию, а затем сохранял организацию.Я попробовал следующее на организационном объекте:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "contact_person_id", referencedColumnName = "id", nullable = false)
public PersonEntity getContactPerson() {
return contactPerson;
}
и
@OneToOne
@JoinColumn(name = "contact_person_id", referencedColumnName = "id", nullable = false)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
public PersonEntity getContactPerson() {
return contactPerson;
}
Но ни один из них, похоже, не работает.Я все еще получаю ту же ошибку.Но я думаю, что это на самом деле должно работать.
Любая помощь высоко ценится!Заранее спасибо.