我有一个简单的POJO(field1、field2、field3),我使用Hibernate进行ORM,并且我有一个基本需求:我永远不应该更新DB中的field3。一旦第一次插入行,当我调用repo来按id(findById)获取对象时,即使我调用field3的setter(setField3()),对保存方法的调用应该抛出错误或异常,指定我正在尝试更新field3,但我不应该。我不'I don“我不知道Hibernate是否能够满足这种需求,或者我是否必须实现自定义方法来满足这种需求。我尝试了这个@Column(name = "field3", updatable = false)
,当我为field3获取并设置另一个值时,保存调用成功并更新了我的实体。
我的Pojo:
public class Application extends AbstractAuditingEntity<Long> {
private static final long serialVersionUID = 1L;
@Column(name = "ins", updatable = false)
private String ins;
}
我的测试重现了这个问题:
@Test
void updateIns_ShouldThrowError(){
Optional<Application> parka = this.applicationRepository.findById(300L);
assertThat(parka.isPresent());
Application parkaApp = parka.get();
parkaApp.setIns("ins-update");
this.applicationRepository.save(parkaApp);
parka = this.applicationRepository.findById(300L);
assertThat(parka.isPresent());
parkaApp = parka.get();
assertThat(parkaApp.getIns()).isEqualTo("ins-update");
}
测试通过,我能够更新字段“ins”。
1条答案
按热度按时间8wtpewkr1#
如果设置了id,则可以检查字段的setter,如果调用它,则抛出错误。
但updatable=false应该有效