当前位置: 首页 > 知识库问答 >
问题:

Hibernate 4.2.2在将实体插入其@OneTomany集合时不验证实体

邵刚洁
2023-03-14

我有一个父实体,与其子实体有OneToMany关联:

Parent {
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "parent", fetch = FetchType.EAGER)
    @Size(min = 0, max = 4)
    List<Child> children = new ArrayList<Child>();

    @Transactional
    public void addChild(Child child) {
        child.setParent(this);
        children.add(child);
    }
}

当我调用addchild()方法时,Hibernate不验证children集合@size约束,并按原样保留child“,这导致数据库中的实体无效。

为什么Hibernate不验证父实体?

共有1个答案

曾典
2023-03-14

Hibernate为子实体触发INSERT,但不为父实体触发UPDATE。我已经调试了Hibernate源代码,发现在上面描述的情况下,org/Hibernate/event/internal/defaultFlushentityEventListener.java:isupdateNecessary()返回false。看来这是一个必须修复的bug。

一个可能的解决方案是进行“假”更改,这会弄脏实体并触发验证过程。

 类似资料:
  • 问题内容: 我有一个关于Hibernate 3.6.7和JPA 2.0的问题。 考虑以下实体(为简洁起见,省略了一些getter和setter方法): 现在考虑这段代码: 子实体错误地两次插入到父实体的子实体列表中。 执行以下操作之一时,代码可以正常工作(列表中没有重复的条目): 删除父实体中的属性 在子级列表上执行一些读取操作(例如,用标记的取消注释行) 这显然是非常奇怪的行为。同样,当使用Ec

  • 我的类有两个子类:和。子类有一个单数PK,其上的映射起作用。问题是我不知道如何将它映射到ParentHobby类上,这个类有一个复合PK。 家长: @entity@table(name=“parent_hobby”)公共类ParentHobby{ ParentHobBypk: 我在编译时遇到的例外情况是: 当子实体具有复合主键时,如何在父实体中定义@OneTomany关系? 相似: @OneTom

  • 主要内容:JPA实体插入示例在JPA中,我们可以通过实体轻松地将数据插入到数据库中。 提供方法来插入数据记录。 JPA实体插入示例 在这里,我们将演示如何使用实现插入学生的记录。 创建一个JPA项目,其项目目录结构如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为StudentEntity.java的实体类,这个类包含以下几个属性:, 和 。 文件:StudentEntity.java 的代码如下 - 第2

  • 我的实体更新有问题。如你所见,我有三个实体。 包含类中的列表。 包含类中的列表。 从我的SQL语句中可以看到,字段和是唯一的。我的表中只允许该组合的一行。 当我用类的新列表更新父实体()时,我希望Hibernate删除旧列表本身并创建新实体。一个一个地更新孩子是有点困难的。这就是为什么我要直接删除所有相关的孩子。 当我更新并为其提供包含具有唯一名称的和(数据库中已存在的实体)组合的列表时,我会出现

  • 我在代码优先的情况下使用EF,我有这样的模型: 我收到一个客户ID和一个产品ID列表。当产品在数据库中不存在时,我想添加它: 问题是EF试图级联更改并尝试插入一个新的对象,其ID与现有对象相同,因此失败。我如何解决这个问题? 这是插入方法: