spring-data-jpa JPA列可更新=false

siotufzp  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(127)

我有一个简单的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”。

8wtpewkr

8wtpewkr1#

如果设置了id,则可以检查字段的setter,如果调用它,则抛出错误。
但updatable=false应该有效

相关问题