我有一个对象模型,看起来像这样:为什么CrudRepository忽略@Column?
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
}
每个字段都有getter和setter,如产生的IntelliJ,证实这些都是正确的。在我的GUI上,用户可以选择更改协议,然后点击“保存”。现在我的服务器需要在后端进行更新。我使用Spring库等我:
@Repository
public interface AgreementRepository extends CrudRepository<Agreement, String> {}
当用户我调用agreementRepository.save(agreement)
提交。但是,我的其中一个字段rate
未在后端进行更新。
我已遍历代码并验证属性在传递到save()
的agreement
对象中设置正确。此外,我已经打印了SQL并验证了它实际上是在这个级别上,问题似乎正在发生,注意save()
方法正在调用SELECT
,然后是UPDATE
,因为我一次又一次地修改同一条目。测试,但我可以清楚地看到UPDATE
部分查询中没有设置rate
字段。
不管我是否也设置RATE
或不是,所有其他字段都设置正确。所有其他更改都传播得很好。这个RATE
字段没有什么特别之处。我想可能是有一个不好的触发器,或者是我之前开发的一个开发者的东西,但是我可以看到Spring生成的SQL显然没有设置它,并且已经验证没有这样的触发器存在。
CrudRepository.save()
会忽略我的一个领域的原因是什么?它没有标记为@Transient
,并且在任何情况下并不罕见。如果它不是CrudRepository
我应该在哪里看看为什么这个字段没有被正确设置?
您正在使用哪个数据库?你是否检查数据库中存在“RATE”列? – Kuchi
因此,其他列更新和评级,不是吗?你有@事务注释吗? – ZaoTaoBao
RATE列存在,是一个'VARCHAR(128)'(绰绰有余),并且是'可空'。我试图将调用方法标记为“@Transactional”,并且达到了相同的效果。但是,是的,其他列更新得很好。 – mike