提问者:小点点

只读jdbc


我想做一些只读-

@ReadOnlyProperty从org.springframework.data. annote.ReadOnlyProperty不做的伎俩。

版本:spring-boot:2.2.0。RC1、spring-data-jdbc:1.1.0。释放,spring-data-Commons:2.2.0。释放

数据库:MSSQL

只读jdbc

它是否应该起作用,还有其他方法可以做到吗?

注意:请不要将spring-data-jdbc与spring-data-jpa混合

import java.util.Set;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.ReadOnlyProperty;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.MappedCollection;

public class Organization {
    @Id
    private Long id;
    private String name;
    @Column("readOnlyProperty")
    @ReadOnlyProperty
    private String readOnlyProperty;
    @ReadOnlyProperty
    @MappedCollection
    private Set<Employee> employees;
}
import org.springframework.data.annotation.Id;

public class Employee {
    @Id
    private Long id;
    private String name;
}
@Test
public void insert() {
    // insert should not set readOnlyProperty
    Organization organization = new Organization("org1", "readOnly");
    Employee employee = new Employee("emp1");
    Set<Employee> employess = new HashSet<>();
    employess.add(employee);
    organization.setEmployees(employess);
    organizationRepository.save(organization);
}

日志:执行准备好的SQL语句[INSERT INTO组织(name, readOnlyProperty)VALUES (?, ?)]

执行准备好的SQL语句[INSERT INTO雇员(姓名、组织)VALUES (?, ?)]


共2个答案

匿名用户

这是一个bug。我为它创建了DATAJDBC-431,它可能会在下一个服务版本中修复。

匿名用户

我没有测试但根据这个

列注释和XML元素定义了可插入和可更新的选项。这些选项允许从SQLINSERT或UPDATE语句中省略此列或外键字段。如果表上的约束阻止插入或更新操作,则可以使用这些选项。如果多个属性映射到同一数据库列,例如通过ManyToOne和Id或Basic映射使用外键字段,也可以使用它们。将可插入和可更新设置为false,可以有效地将属性标记为只读。

@Column(name="COLUMN_NAME",updatable=false, insertable=false)
private String fieldName;

应该使该字段只读。