想象一下,我有一个典型的多表RDBMS架构和一个使用所有(或许多)各种Hibernate关系的复杂实体层次结构。将集合类作为一些字段(集合,列表)来管理Java中的关系,以及循环引用。可能会有延迟加载,因此在幕后会有代理类。
然后我决定使用默认的Java序列化来序列化这个对象层次结构,并且可能稍后将其反序列化回内存(假设回到同一系统)。这是直截了当的,还是有陷阱和情况,它不会起作用?如果某些相关对象还没有延迟加载,可能会出现问题,例如?
答案 0 :(得分:0)
我们在ORM中实例化实体对象以匹配数据库中的当前信息,并且这些对象倾向于严重依赖(如您所建议的)与数据库的实时(或可复活:P)连接以便恢复它的信息,每次一件。
为了避免这些问题,我建议您在尝试序列化信息之前,急切地获取每个实体的完整信息。序列化机制适用于您,但如果尝试使用Java本机机制(https://javajee.com/best-practices-for-serialization-in-java)而不是更轻松的机制,则应考虑很多事情,并且更独立于实现。
无论如何,这只是个人意见,我认为你没有正确使用ORM提供的信息建议序列化实体对象,因为它在任意时刻创建了数据库状态的任意快照,这在将来要将这些对象恢复到内存中时,可能会完全不准确。