java - 为什么Hibernate 不生成包含serialVersionUID 列的DDL?

标签 java hibernate jpa maven 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 类,实现可序列化标记接口(interface)。
但是,在这种情况下,只有实体中的给定字段使用序列化/反序列化将二进制数据放入数据库列中。尽管如此 - 序列版本 UID 并未存储在数据库中的任何位置。

有关持久字段(哪些是持久字段,哪些不是)的更多信息,您可以查看 JPA 2.0 FR specification 中的2.2 持久字段和属性章节。 .

关于java - 为什么Hibernate 不生成包含serialVersionUID 列的DDL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8468511/

相关文章:

java - 使用更多信息扩展 log4j 错误电子邮件

java - 如何挂载Hadoop HDFS

java - 如何使用 java 和 hibernate 使用 byte[] 创建可搜索的字符串 ID

java - 我可以在 JPA CriteriaBuilder 中引用非映射表吗?

java - 使用 Spring JPA/Hibernate 按不同值批量更新

java - JPA 查询不起作用

java - 缓存和缩小 dojo、jquery js 和 CSS 的最佳 java 工具

java - Spring 与 mongo-java-driver 使用 Azure Cosmos DB 作为 MongoDB

java - 是否可以将数据库凭据存储在 hibernate.cfg.xml 中

java - Hibernate : org. hibernate.PropertyAccessException:IllegalArgumentException