我有一个Model属性,需要设置@ReadOnlyProperty,这样它在第一次插入行后就不会保留。
假设我的模型如下
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
@JsonIgnore
private Long id;
@Column(unique = true, nullable = false)
@ReadOnlyProperty
private String openId;
}
然后我有一个UserRepository:
public interface UserRepository extends JpaRepository<User, Long> {
}
然后,我为POST和PUT提供2个Restful API。
创建用户操作代码如下:
user.setOpenId(1);
userRepository.save(user)
更新用户操作几乎相同:
user.setOpenId(2);
user = userRepository.save(user);
我很惊讶用户的openId属性将被更改,在POST之后再进行PUT之后,返回的用户对象将具有更改后的值。(user.getOpenId()== 2)
@ReadOnlyProperty似乎不起作用,我正在使用spring-boot-starter-data-jpa的RELEASE版本。有人可以帮忙解释吗?
答案 0 :(得分:0)
@ReadOnlyProperty
似乎无效。以下错误报告已开放多年:
Properties with @ReadOnlyProperty annotation are being nullified in PATCH requests
如果您想拒绝通过Spring Data Rest端点修改属性,请使用@JsonProperty(access = Access.READ_ONLY)
批注。它会影响JSON反序列化,因此带注释的属性永远不会到达Spring Data Rest。
如果您还需要通过Spring Data JPA拒绝写入属性,则可以使用以下JPA批注:@Column(updatable=false)
它拒绝底层JPA级别(而不是Spring Data JPA级别)的替代。 / p>