根据我对管理一致性序列化的理解,algo在类中保留一个序列化ID为private static final long serialVersionUID = 3170588813843556321L;
,同时保存/从流中获取对象。并且该ID将保存在该文件/流中。
但是对于DB而我们根本没有将它保存在DB中,所以hibernate如何在反序列化期间检查一致性并抛出java.io.InvalidClassException
。
如果我理解错误,请纠正我。
答案 0 :(得分:0)
hibernate不使用序列化将类存储到数据库中。它通过object relational mapping和(简单地)将对象的每个属性映射到表中的列。
只有当您具有特定类型的属性(比如public Image getImage()
)时,它才会存储“真实”二进制文件 - 它可能会将此属性映射到blob,以使用序列化/反序列化来存储/加载映射类的图像属性。 / p>
检查hibernate中的数据一致性是通过显式锁定(只要你的实体正在使用它就锁定构成你的实体的行)或通过optimistic locking - 在那里添加一个“版本”字段到您的实体,每次修改实体时都更新它,并使用"update table set ... where version=:myVersion"
形式的sql来确保没有2个进程同时修改同一个实体。