使用级联的实体映射似乎不起作用

我有以下情况:


组织实体.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;

}

但两者似乎都不起作用。我仍然遇到同样的错误。但我认为这实际上应该有效。


慕村225694
浏览 175回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java