下面是我的实体类,我在其中使用了@OneToMany注解,这会导致不正确的绑定。ref_no和seq_no是我的绑定参数。但是绑定值的顺序不对。ref_no的值与seq_no绑定,seq_no的值与ref_no绑定。
@OneToMany(fetch = EAGER)
@JoinColumns({
@JoinColumn(name = "REF_NO",referencedColumnName = "REF_NO"),
@JoinColumn(name = "SEQ_NO",referencedColumnName = "SEQ_NO")
})
public Set<InProcessPartyEntity> getParties() {
return parties;
}
输出跟踪日志:
休眠:从rbi_trade.ot_txn_party p1_0中选择p1_0.seq_no,p1_0.ref_no,p1_0.party_code,p1_0.party_id,p1_0.party_id,其中(p1_0.seq_no,p1_0.ref_no)位于((?,?))中2023-03- 09 T08:31:42.540+01:00跟踪15588 --- [调度-1]组织.休眠.表单.jdbc.绑定:绑定参数[1]为[VARCHAR] - [E313100005323221237] 2023-03- 09 T08:31:42.540+01:00跟踪15588 --- [调度-1]组织休眠组织jdbc绑定:将参数[2]绑定为[VARCHAR] - [001]
在同一个实体类中,我还使用了带有多个连接列的@OneToOne注解,它工作得非常好,并产生了正确的绑定参数值
@OneToOne(fetch = EAGER)
@JoinColumns({
@JoinColumn(name = "REF_NO",referencedColumnName = "REF_NO"),
@JoinColumn(name = "SEQ_NO",referencedColumnName = "SEQ_NO")
})
public InProcessWorkUnitEntity getWorkUnit() {
return workUnit;
}
输出跟踪日志:
休眠:从rbi_trade.ot_workunit i1_0中选择i1_0.ref_no,i1_0.seq_no,i1_0.reg_by,其中(i1_0.ref_no,i1_0.seq_no)位于((?,?))中2023-03- 09 T08:31:42.524+01:00跟踪15588 --- [调度-1]组织.休眠.表单.jdbc.绑定:绑定参数[1]为[VARCHAR] - [E313100005323221237] 2023-03- 09 T08:31:42.525+01:00跟踪15588 --- [调度-1]组织休眠组织jdbc绑定:将参数[2]绑定为[VARCHAR] - [001]
自从我升级到Sping Boot JPA 3.0.2后,我就面临着这个问题。我以前使用的是2.7.2版本,其中与@OneToMany的绑定工作正常。
有什么建议吗?
1条答案
按热度按时间4jb9z9bj1#
我没有足够的信誉点来发表评论,所以我会在回答中写下我的考虑。
关系是双向的吗?如果你也能共享
InProcessPartyEntity
类代码,那会很有帮助。实际上,如果你至少能共享实体属性和它们的Map,那会很有帮助。在更新到JPA 3时,我注意到Hibernate在验证注解Map时变得更加严格。