我有以下情况:
组织实体.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;
}
// ...
}
联系人.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;
}
// ...
}
在数据库上,表 Organization 有一个指向 Person 的不可为空的外键。实体映射是单向的 New 当我想要持久化一对新记录(一个组织和一个人)时merge,OrganisationEntity我收到以下错误:
17:10:19.827 WARN [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])
这对我来说非常有意义,因为它试图插入组织而不涉及任何人。所以我通常会定义一个级联行为,以便 hibernate 首先插入人,设置引用和组织,然后持久化组织。我在组织实体上尝试了以下操作:
@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;
}
但两者似乎都不起作用。我仍然遇到同样的错误。但我认为这实际上应该有效。
相关分类