0

根据我对管理一致性序列化算法的理解,private static final long serialVersionUID = 3170588813843556321L;在从流中保存/获取对象时,在类中维护一个序列化 ID。并且该 ID 将保存在该文件/流中。

但是使用 DB,而我们根本没有将它保存在 DB 中,那么在反序列化和 throw 期间如何休眠检查一致性java.io.InvalidClassException

如果我的理解有误,请纠正我......

4

1 回答 1

0

hibernate 不使用序列化将您的类存储到数据库中。它通过对象关系映射工作,并且(简单地)将对象的每个属性映射到表中的列。仅当您具有特定类型的属性(例如public Image getImage())时,它才会存储“真实”二进制文件 - 它可能将此属性映射到 blob 以使用序列化/反序列化来存储/加载映射类的图像属性。

在 hibernate 中检查数据一致性可以通过显式锁定(只要您的实体正在使用,它就会锁定构成您的实体的行)或通过乐观锁定- 它会向您的实体添加一个“版本”字段,更新每次修改实体时,使用表单"update table set ... where version=:myVersion"的sql确保没有2个进程同时修改同一个实体。

于 2013-06-25T04:40:06.187 回答