Вопрос находится в заголовке. Ниже я просто описал некоторые свои мысли и результаты.
Когда у меня была очень простая модель предметной области (3 таблицы без любых отношений), все мои объекты НЕ реализовали сериализуемый.
Но когда модель предметной области стала более сложной, я получил RuntimeException, который заявил, что один из моих объектов не реализовал сериализуемый.
Я использую, в спящем режиме как реализация JPA.
Интересно:
Обычно это происходит, если смешать HQL и нативные SQL-запросы. В HQL, Hibernate отображает типы, которые вы передаете тому, что понимает БД. Когда вы запускаете родной SQL, то вы должны сделать отображение самостоятельно. Если вы этого не делаете, то отображение по умолчанию - это сериализация параметра и отправка его в БД (в надежде, что она его понимает)
.Классы должны реализовывать сериализуемые, если вы хотите их сериализовать. Это не имеет прямого отношения к JPA, и спецификация JPA не требует, чтобы сущности были сериализуемы. Если Hibernate действительно жалуется на это, я полагаю, что это ошибка Hibernate, но я полагаю, что вы прямо или косвенно делаете что-то другое с сущностями, что требует, чтобы они были сериализуемы.
.Согласно JPA Spec:
Если экземпляр сущности должен передаваться по значению как выделенный объект (например, через удаленный интерфейс), то класс сущности должен реализовать интерфейс Serializable.
"JSR 220: Enterprise JavaBeansTM, версия 3.0 Java Persistence API, версия 3.0, финальная версия 2 мая 2006 года"
. Вам нужно, чтобы ваши сущности были Serializable
, если вам нужно перенести их по проводу (сериализовать в какое-нибудь другое представление), сохранить их в http-сессии (которая, в свою очередь, сериализуется на жесткий диск контейнером сервлета) и т.д.
Просто для стойкости, Serializable
не нужна, по крайней мере, в Hibernate.
Но лучше всего сделать их Сериализуемыми
.