【问题标题】:Hibernate update with relations foreign key使用关系外键进行休眠更新
【发布时间】:2014-07-02 08:26:43
【问题描述】:

我正在尝试通过 JPA 使用 Hibernate 来持久化引用 B 对象的实体 A。

在我看来,我创建了一个包含 B 个条目的组合框的表单。当我处理用户的输入时,我为 A 元素创建了一个新的 DTO,并将 B DTO 分配为其相关实体。

然后我将这个对象发送到我的服务层,在那里我调用我的 dao 来持久化我的 A 实体:

dao.persist(A);

但我得到以下异常:

Error org.hibernate.TransientPropertyValueException: object references an unsaved transient instance

如果我用cascade=CascadeType.ALL 注释我的实体,那么我会在数据库中插入一个新的 B 实体。

我该怎么做才能使我的 A 实体仅由 B 的外键持久化?也就是说,只有外键被插入到数据库中(因为 B 是主表,我不需要插入元素)。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    您需要设置关系的双方以在双向关系中正确处理级联。

    即对于单音:

    a.setB(b);
    b.setA(b);
    

    单机:

    a.setB(b);
    b.getAs().add(a);
    

    请参阅此处了解如何封装这些操作:

    https://stackoverflow.com/a/23648953/1356423

    【讨论】:

    • 我确实将它映射为双向关系,但问题仍然存在。
    • 您需要发布更多代码。您的两个实体类以及创建和保存实体的代码。
    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 2011-02-23
    • 2020-07-02
    • 1970-01-01
    • 2017-03-18
    • 2012-04-08
    • 2013-03-08
    • 2013-05-27
    相关资源
    最近更新 更多