gpt4 book ai didi

java - Hibernate在查询Entity2时自动更新Entity1

转载 作者:行者123 更新时间:2023-12-01 14:15:26 25 4
gpt4 key购买 nike

我并不期待这个问题的具体答案,因为它太复杂,无法详细解释,只是对问题可能出在哪里的一些指导。

我总结一下,我有一个实体“船舶”,带有实体“出发地”、“目的地”和“国家/地区”的外键。我从数据库中获取一艘船,然后修改其他字段(日期),然后查询数据库中相关的出发地、目的地和国家/地区。当我查询 Origin 和 Country 时,它会按预期进行,但是当我查询 Destination 时,执行 query.getResultList() 时,并在 select a from DESTINATION 之前, Hibernate 自动执行 update SHIP set ... 并设置除 IDN_DEST 之外的所有 Ship 字段。

知道这会发生什么吗?

我的猜测是,由于实体已在 session 中修改,Hibernate 不知何故需要更新它,但仅此而已。

据我所知,Ship.java 中没有差异:

// bi-directional many-to-one association
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDN_ORIGIN", insertable = false, updatable = false)
private Origin tOrigin;

@Column(name = "IDN_ORIGIN")
private Integer idnOrigin;

// bi-directional many-to-one association
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDN_DEST", insertable = false, updatable = false)
private Destination tDest;

@Column(name = "IDN_DEST", updatable = false)
private Integer idnDest;

// bi-directional many-to-one association
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDN_COUNTRY", insertable = false, updatable = false)
private Country tCountry;

@Column(name = "IDN_COUNTRY")
private Integer idnCountry;

最佳答案

关于您的问题:在 Query.list() 执行脏检查之前 hibernate 并自动执行 flush() 以防止状态不一致。
为了防止这种情况,如果您不想自动刷新,但只在提交时更改,请将 Session.flushMode 更改为 COMMIT。
关于你的例子,有两件事:

  • 为什么不使用 getter 来获取 tOrigin、tCountry、tDest
  • 您可以在Ship更新之前阅读tOrigin、tCountry、tDest吗?

关于java - Hibernate在查询Entity2时自动更新Entity1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18147186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com