我有一个如下所示的对象模型:
public class Agreement {
@Id @Column(name = "AGREEMENT_ID") private String agreementId;
@Column(name = "RATE") private String rate;
@Column(name = "NOTE") private String note;
... // A number of other fields
}
每个字段都有IntelliJ生成的getter和setter,验证这些都是正确的。在我的GUI上,用户可以选择更改协议,然后点击" Save"。现在我的服务器需要在后端进行更新。我使用Spring Repositories,所以我有:
@Repository
public interface AgreementRepository extends CrudRepository<Agreement, String> {}
当用户进行提交时,我调用agreementRepository.save(agreement)
。但是,我的一个字段rate
未在后端更新。
我已逐步完成代码并验证rate
属性是否已在传递给agreement
的{{1}}对象中正确设置。此外,我打印了SQL并验证了事实上在这个级别上问题似乎正在发生,并指出save()
方法正在调用save()
后面跟SELECT
按预期因为我在测试中一遍又一遍地修改相同的条目,但我可以在查询的UPDATE
部分清楚地看到UPDATE
字段未设置。
Odder仍然,所有其他字段都正确设置,无论我是否也设置rate
。所有其他变化都在正常传播。这个RATE
字段没有什么不寻常之处。我想也许有一个糟糕的触发器或者我之前的开发人员放入的东西,但是我可以看到Spring生成的RATE
SQL显然没有设置它,并且已经验证没有这样的触发器存在。
UPDATE
忽略我的某个字段的原因是什么?它没有标记CrudRepository.save()
,并且在任何方面都不常见。如果它不是@Transient
我应该在哪里查看为什么没有正确设置此字段?
答案 0 :(得分:1)
这是真正狂野的部分。看来我的问题通过重启IntelliJ解决了。真的很难理解出了什么问题。
我开始将DB中的列重命名为其他内容,但保留所有其他配置相同。我注意到没有抛出任何异常,并试图找出原因,Spring Repository应该因为配置错误的实体而对我大喊大叫。经过几次奇怪的发生之后,我认为最好重新启动IntelliJ,以防万一。
突然它正确地拾起了列没有正确命名。我将列重命名为它应该是什么,一切都按预期工作。真奇怪。