【问题标题】:Hibernate OneToMany relationship sets foreign key to null when inserting entityHibernate OneToMany 关系在插入实体时将外键设置为 null
【发布时间】:2017-11-07 14:56:10
【问题描述】:

我有两个实体:Person 和 Event。这个想法是,一个人是多个事件的所有者,一个事件只能由一个人拥有。

Person 实体片段:

@OneToMany(fetch = FetchType.EAGER,cascade=CascadeType.ALL,mappedBy="person")
@JsonIgnore
private List<Event> event;

事件实体片段:

@ManyToOne(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
@JsonIgnore
private Person person;

当我尝试插入一个 Person 并随后在数据库中添加一些事件时,Event 表中的外键始终为空。这意味着我无法跟踪事件的“所有者”(这是我的目标)。

此外,如果我想使用 @JoinTable 注释来跟踪所有者,我应该怎么做?

欢迎提出任何建议。

【问题讨论】:

    标签: java hibernate jpa persistence one-to-many


    【解决方案1】:

    可能您没有正确连接实体。以下伪代码将向您展示如何连接实体:

    Person person = new Person();
    Event event1 = new Event();
    Event event2 = new Event();
    
    person.getEvents().add(event1);
    person.getEvents().add(event2);
    
    event1.setPerson(person);
    event2.setPerson(person);
    
    // Start transaction here 
    entityManager.persist(person); // this should save also events because of cascade attribute
    // commit transaction
    

    此外,如果我想使用 @JoinTable 注释来跟踪所有者,我应该怎么做?

    在您的情况下,您不需要它,因为您有双向关系。仅当您具有从 PersonEvent 的单向 @OneToMany 关系时,这才有意义。

    【讨论】:

    • 你是对的。 :) 在更新此人时,我实际上犯了一个愚蠢的错误。非常感谢!
    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2016-10-23
    • 2020-12-02
    相关资源
    最近更新 更多