Hibernate

时间:2015-10-12 09:29:36

标签: java mysql hibernate

我遇到Hibernate将重复记录写入表格的问题。 当我查看日志时,我看到:

  1. 插入...... - 第一次插入,没关系。
  2. 选择... where ...
  3. 插入...... - 第二次插入,不应该发生!
  4. 有趣的是,当我在代码中设置断点时,它运行良好,只写入1条记录。因此,我的猜测是Hibernate执行select查询以检查是否已插入记录。然后,如果我没有断点,代码执行速度很快,因此DB /缓存尚未更新(?),因此Hibernate获取空结果,认为没有记录并执行另一个插入命令。但是,如果我有断点,则在执行select之前更新DB /缓存,所以一切都很好。

    我的问题是,我该怎么做才能保证Hibernate始终获得正确的数据库状态?或者,如果您认为这里存在另一个导致此问题的问题,它会是什么? 感谢。

    Entity 1: 
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "property2")
    private Collection<Entity2>...
    
    Entity 2: 
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="field1",referencedColumnName="field2")
    private Entity1...
    

    我通过清除collection,添加所有Entity2个对象,然后在实体管理器上进行合并调用来更新。但是,当集合中没有对象并且我只是添加一个新对象时,实际情况会发生,所以这不是没有正确清除的问题。

1 个答案:

答案 0 :(得分:0)

我不确定,但原因可能是: 你有2个主题:

  • 1个主题 - 选择..其中... _______________插入
  • 2个主题______________________ insert