Когда и почему объекты JPA должны реализовать сериализуемый интерфейс?

Вопрос находится в заголовке. Ниже я просто описал некоторые свои мысли и результаты.

Когда у меня была очень простая модель предметной области (3 таблицы без любых отношений), все мои объекты НЕ реализовали сериализуемый.

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

Я использую, в спящем режиме как реализация JPA.

Интересно:

  1. Это - определенное для поставщика требование/поведение?
  2. Что происходит с моими сериализуемыми объектами? Они должны быть сериализуемыми для хранения или для передачи?
  3. В котором моменте становится необходимо сделать мой объект сериализуемым?
128
задан Roman 7 January 2010 в 14:17
поделиться

4 ответа

Обычно это происходит, если смешать HQL и нативные SQL-запросы. В HQL, Hibernate отображает типы, которые вы передаете тому, что понимает БД. Когда вы запускаете родной SQL, то вы должны сделать отображение самостоятельно. Если вы этого не делаете, то отображение по умолчанию - это сериализация параметра и отправка его в БД (в надежде, что она его понимает)

.
54
ответ дан 24 November 2019 в 00:38
поделиться

Классы должны реализовывать сериализуемые, если вы хотите их сериализовать. Это не имеет прямого отношения к JPA, и спецификация JPA не требует, чтобы сущности были сериализуемы. Если Hibernate действительно жалуется на это, я полагаю, что это ошибка Hibernate, но я полагаю, что вы прямо или косвенно делаете что-то другое с сущностями, что требует, чтобы они были сериализуемы.

.
4
ответ дан 24 November 2019 в 00:38
поделиться

Согласно JPA Spec:

Если экземпляр сущности должен передаваться по значению как выделенный объект (например, через удаленный интерфейс), то класс сущности должен реализовать интерфейс Serializable.

"JSR 220: Enterprise JavaBeansTM, версия 3.0 Java Persistence API, версия 3.0, финальная версия 2 мая 2006 года"

.
104
ответ дан 24 November 2019 в 00:38
поделиться

Вам нужно, чтобы ваши сущности были Serializable, если вам нужно перенести их по проводу (сериализовать в какое-нибудь другое представление), сохранить их в http-сессии (которая, в свою очередь, сериализуется на жесткий диск контейнером сервлета) и т.д.

Просто для стойкости, Serializable не нужна, по крайней мере, в Hibernate. Но лучше всего сделать их Сериализуемыми .

.
51
ответ дан 24 November 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: