Данные Spring @ReadOnlyProperty, вызывающие непредвиденное поведение - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть атрибут 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> {

}

, затем я предоставляю 2 Restful API для POST и PUT.

Создать код операции пользователя так же просто, как показано ниже:

user.setOpenId(1);
userRepository.save(user)

Операция обновления пользователя почти такая же:

user.setOpenId(2);
user = userRepository.save(user);

Я удивлен, что атрибут openId пользователя будет изменен, после POST, а затем PUT возвращенный объект пользователя будет иметь измененное значение. (user.getOpenId() == 2)

Похоже, @ReadOnlyProperty не работает, я использую RELEASE-версию spring-boot-starter-data-jpa.Может кто-нибудь помочь объяснить?

1 Ответ

0 голосов
/ 21 февраля 2019

Кажется, что @ReadOnlyProperty не работает.Следующий отчет об ошибках открыт в течение многих лет:

Свойства с аннотацией @ReadOnlyProperty обнуляются в запросах PATCH

Если вы хотите отказать в изменении свойства с помощью Spring Data Restконечные точки, используйте аннотацию @JsonProperty(access = Access.READ_ONLY).Это влияет на десериализацию JSON, поэтому аннотированное свойство никогда не достигает Spring Data Rest.

Если вам также нужно запретить запись свойства с помощью Spring Data JPA, вы можете использовать следующую аннотацию JPA: @Column(updatable=false) Itзапрещает переопределение на нижележащем уровне JPA вместо уровня Spring Data JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...