Почему Hibernate не генерирует DDL со столбцом для serialVersionUID? - PullRequest
0 голосов
/ 12 декабря 2011

Я получаю DDL (цель postgres), когда добавляю цель hbm2ddl с помощью плагина Maven hibernate3-maven-plugin:

create table listing (
    id varchar(36) not null,
    hash_code int4 not null,
    version int4,
    name varchar(100),
    primary key (id)
);

Я определил все показанные столбцы.

Все примеры использования, которые я видел в Интернете:

private static final long serialVersionUID = -8402611044513083864L;

никогда , имеют аннотацию @Column.Мой DDL не имеет столбца для этого.Кто-нибудь еще?

Так как же код десериализации в Java узнает, какая версия класса была сериализована и сохранена по сравнению с той, в которую он десериализуется?

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

UID последовательной версии используется, когда объект сериализуется / десериализуется.

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

Сериализация, с другой стороны, используется, если вы хотите создать двоичное представление вашего объекта, а затем воссоздать экземпляр объекта, используя процесс десериализации.

Обратите внимание, что вы можете использовать сериализацию с JPA, т. Е. Если вы хотите сохранить поле (в вашей сущности JPA), которое не является ни базовым типом, ни встраиваемым, ни другим объектом, а просто классом Java, который реализует интерфейс маркера Serializable.
Однако в этомВ этом случае только данное поле в вашей сущности использует сериализацию / десериализацию для помещения двоичных данных в столбец базы данных.Тем не менее - серийный номер UID не хранится нигде в базе данных.

Для получения дополнительной информации о постоянных полях (которые сохраняются, а какие нет) вы можете взглянуть на 2.2 Постоянные поля и свойства глава в спецификации JPA 2.0 FR .

2 голосов
/ 12 декабря 2011

статические значения никогда не сериализуются, и JPA не использует сериализацию Java.

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