Связь только для чтения с отображением JPA OneToMany - PullRequest
4 голосов
/ 06 февраля 2011

У меня есть транзакционный объект, связанный с другим объектом, в результате чего связанный объект не должен обновляться в случае.

Например. Дело * -> Пользователь

Если дело принадлежит пользователю, и, наоборот, у пользователя может быть много связанных дел.

Ассоциация сопоставляется с использованием аннотаций OneToMany и JoinColumn JPA.

Я также пытался пометить аннотацию Trasactional для объекта User как readonly, а также сделал методы выборки временными. Но это не останавливает обновление пользователя, если его состояние изменилось.

Пожалуйста, помогите мне как объявить пользовательскую ассоциацию "только для чтения".

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

можно добавить updatable=false в аннотацию @JoinColumn.

Более того, вам не следует добавлять метод установки для user в вашей сущности Case и такой же для caseSet в вашей Userюридическое лицо.Получатель getCaseSet в User сущности также должен вернуть неизменяемую коллекцию:

public Set<Case> getCaseSet() {
    return Collections.unmodifiableSet(caseSet);
}
0 голосов
/ 09 октября 2018

Аннотация Column и элемент XML определяют вставляемые и обновляемые параметры. Это позволяет опустить этот столбец или поле внешнего ключа в операторе SQL INSERT или UPDATE. Их можно использовать, если ограничения таблицы препятствуют операциям вставки или обновления. Их также можно использовать, если несколько атрибутов отображаются на один и тот же столбец базы данных, например, с полем внешнего ключа через сопоставление ManyToOne и Id или Basic. Если для вставляемого и обновляемого устанавливается значение false, атрибут фактически помечается как доступный только для чтения.

В сопоставлении @OneToMany, аннотации @JoinColumn, добавьте и updatable=false и insertable=false, затем укажите тип каскада как PERSIST вместо ALL @OneToMany(cascade = CascadeType.PERSIST)

@JoinColumn(name = "<ReadOnlyTableName>", updatable = false, insertable = false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...