我不期待这个问题有一个具体的答案,因为它太复杂了,无法详细解释,只是对问题可能出在哪里的一些指导。
我总结一下,我有一个实体 Ship,具有实体 Origin、Destination 和 Country 的外键。我从数据库中获取船舶,然后修改其他字段(日期),然后在数据库中查询相关的 Origin、Destination 和 Country。当我查询 Origin 和 Country 时,它按预期进行,但是当我查询 Destination 时,在执行query.getResultList()
时和之前select a from DESTINATION
,Hibernate 会自动执行update SHIP set ...
并设置除 IDN_DEST 之外的所有 Ship 字段。
知道这会发生什么吗?
我的猜测是,由于实体已在会话中被修改,休眠以某种方式需要更新,但仅此而已。
就我所见,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;