Снимите существующие аннотации и аннотируйте список с помощью @Lob - это указывает, что постоянное свойство или поле должны сохраняться как большой объект для поддерживаемого базой данных большого объекта типа .
Если тип переменной был подтипом Serializable, вы можете просто полностью исключить аннотации; Правила JPA для сопоставлений по умолчанию гласят, что типы, которые являются Сериализуемыми, а не примитивными или Embeddable
, сериализуются и хранятся в столбцах BLOB. Тем не менее, List не Serializable, хотя ArrayList и.
Вы можете использовать @Lob с @ElementCollection, но я не уверен, каков будет результат; я не знаю, сериализует ли это весь список или создает таблицу, в которой каждый элемент списка сериализуется отдельно. Это, вероятно, вас не интересует в любом случае.
МНОГО ПОСЛЕДНЕГО РЕДАКТИРОВАНИЯ: Конечно, как известно старательному исследователю спецификации, эта аннотация работает только для полей с сериализуемым типом , а не с полями, которые просто содержат объекты сериализуемого класс . Следовательно, чтобы сделать эту работу, вам придется заниматься махинациями. Я посмотрел, можно ли сделать что-то умное с универсальным подстановочным знаком, ограниченным типом пересечения, но я не думаю, что вы можете. Вы можете, однако, написать небольшой класс, подобный этому:
class SerializableInstanceOf<T> implements Serializable {
public final T instance;
public SerializableInstanceOf(T instance) {
Serializable s = (Serializable)instance;
this.instance = instance;
}
}
И использовать это как держатель для списка - у сущности есть поле этого типа, помеченное @Lob, и содержит ссылку на список в нем. Каждый раз, когда вы хотите работать со списком, вы проходите через поле экземпляра, возможно, через метод getList для объекта.
Это некрасиво, но оно должно позволить тебе делать то, что тебе нужно.