我想做一些只读-
@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 (?, ?)]
这是一个bug。我为它创建了DATAJDBC-431,它可能会在下一个服务版本中修复。
我没有测试但根据这个
列注释和XML元素定义了可插入和可更新的选项。这些选项允许从SQLINSERT或UPDATE语句中省略此列或外键字段。如果表上的约束阻止插入或更新操作,则可以使用这些选项。如果多个属性映射到同一数据库列,例如通过ManyToOne和Id或Basic映射使用外键字段,也可以使用它们。将可插入和可更新设置为false,可以有效地将属性标记为只读。
@Column(name="COLUMN_NAME",updatable=false, insertable=false)
private String fieldName;
应该使该字段只读。