spring-data-jdbc 只读

我试图使某些字段只读->插入更新又名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 员工 (姓名, 组织) VALUES (?, ?)]


白衣染霜花
浏览 101回答 2
2回答

大话西游666

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

慕村9548890

我没有测试,但根据这个Column 注释和 XML 元素定义可插入和可更新选项。这些允许从 SQL INSERT 或 UPDATE 语句中省略此列或外键字段。如果表上的约束阻止插入或更新操作,则可以使用这些。如果多个属性映射到同一数据库列,例如通过 ManyToOne 和 Id 或 Basic 映射使用外键字段,也可以使用它们。将 insertable 和 updatetable 设置为 false,可以有效地将属性标记为只读。@Column(name="COLUMN_NAME",updatable=false, insertable=false) private String fieldName;应该使该字段只读。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java