【问题标题】:How to implement a read-only property with Spring Data?如何使用 Spring Data 实现只读属性?
【发布时间】:2023-03-25 19:07:02
【问题描述】:

这应该是一件简单的事情!但到目前为止,我一直无法找到答案。 要么我遗漏了一些明显的东西,要么我遗漏了一些明显的东西......

我有一堂课,比如说 Person。具有三个字段 - “id”、“name”和“reputation”。 假设我愿意更新“名称”而不是“声誉”。我希望 Spring Data 在从 DB 检索时获取“reputation”的值,但在我保存 bean 时忽略它。

@Transient 注释在那里,但是 Spring 完全忽略了该字段并且根本不填充它。理想情况下,我正在寻找类似 @​​ReadOnly 注释的东西。

更多详情

  • 我正在为 Neo4j 使用 Spring Data,但我相信这适用于任何 Spring Data 风格。
  • 这是基于 Jersey/Jackson 的 RESTful 服务的后端。 ** 当我满足 GET 请求时,我想提供“声誉”值。但是当我收到 PUT 更新时,我不想接受它。 ** 到目前为止,我可以使用 Jackson 功能。但我希望能够更新数据库,而不必先获取现有的 Person 对象。
  • 我认为完成这项工作的唯一方法是定义两个类 - 一个具有“声誉”字段,一个没有。但这似乎真的很笨拙。没有更简单的吗?

【问题讨论】:

  • 我一直在挖掘,看起来这很容易添加。例如,已经有 ReadOnlyRelatedToCollectionFieldAccessorFactory。对于节点属性,我只需要类似的东西。我很困惑为什么这还没有。
  • 我知道 Spring Data 和 JPA,这是通过 JPA 注释处理的。我对 Neo4J 完全不熟悉,但我会开始研究 Neo4j。

标签: java neo4j spring-data spring-data-neo4j


【解决方案1】:

您可以在没有设置器的情况下使用瞬态属性。该瞬态属性将返回要保护的 db 属性值。

【讨论】:

    【解决方案2】:

    您可以使用 org.springframework.data.annotation 中的 @ReadOnlyProperty。见ReadOnlyProperty

    @ReadOnlyProperty
    private Object readOnlyValue;
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      相关资源
      最近更新 更多