1

我正在尝试使某些字段只读->插入更新又名save()不应将该字段发送到数据库,但该字段应填充select

来自 org.springframework.data.annotation.ReadOnlyProperty 的@ReadOnlyProperty不能解决问题。

版本: spring-boot:2.2.0.RC1,spring-data-jdbc:1.1.0.RELEASE,spring-data-commons:2.2.0.RELEASE

数据库: MSSQL

spring-data-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);
}

LOG: 执行准备好的 SQL 语句 [INSERT INTO organization (name, readOnlyProperty) VALUES (?, ?)]

执行准备好的 SQL 语句 [INSERT INTO employee (name, organization) VALUES (?, ?)]

4

2 回答 2

0

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

于 2019-10-14T14:11:58.513 回答
0

我没有测试,但根据这个

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

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

应该使该字段只读。

于 2019-10-11T12:25:53.413 回答