繁体   English   中英

Hibernate为什么不为serialVersionUID生成带有列的DDL?

[英]Why doesn't the Hibernate generate a DDL with column for serialVersionUID?

当我使用Maven插件hibernate3-maven-plugin添加目标hbm2ddl时,我得到了这个DDL(postgres目标):

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中的反序列化代码如何知道要序列化和存储的类的版本与要反序列化到的版本的类?

序列化/反序列化对象时,将使用序列号UID。

如果将对象注释为JPA实体, 则不使用序列化,而只是将对象转换为另一种表示形式-作为数据库表中的一行。
从数据库中获取行时,此数据将用于创建状态正确设置的对象的新实例。

另一方面,如果要构造对象的二进制表示形式,然后使用反序列化过程重新创建对象实例,则使用序列化。

请注意,您可以将序列化与JPA一起使用,即,如果您要保留一个字段(在您的JPA实体内),该字段既不是基本类型,也不是可嵌入的,也不是其他实体,而只是实现序列化标记接口的普通Java类。
但是,在这种情况下,只有您实体中的给定字段才使用序列化/反序列化将二进制数据放入数据库列中。 仍然-串行版本UID不会存储在数据库中的任何位置。

有关持久性字段(持久性字段和非持久性字段 )的更多信息,请参见JPA 2.0 FR规范中的 2.2持久性字段和属性章节。

静态值从不序列化,并且JPA不使用Java序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM