为什么CrudRepository忽略@Column?

时间:2016-09-29 15:17:14

标签: java spring intellij-idea

我有一个如下所示的对象模型:

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我应该在哪里查看为什么没有正确设置此字段?

1 个答案:

答案 0 :(得分:1)

这是真正狂野的部分。看来我的问题通过重启IntelliJ解决了。真的很难理解出了什么问题。

我开始将DB中的列重命名为其他内容,但保留所有其他配置相同。我注意到没有抛出任何异常,并试图找出原因,Spring Repository应该因为配置错误的实体而对我大喊大叫。经过几次奇怪的发生之后,我认为最好重新启动IntelliJ,以防万一。

突然它正确地拾起了列没有正确命名。我将列重命名为它应该是什么,一切都按预期工作。真奇怪。