Java 如何分离Hibernate对象的持久属性

Java 如何分离Hibernate对象的持久属性,java,hibernate,Java,Hibernate,我在Hibernate中有一个对象,其中有几个延迟加载的多对一列。对于一组操作,我不一定需要将对象持久化到数据库中 如何直接获取一个对象,以便每次尝试访问多对一实体时,它不需要从数据库延迟获取,并且我可以在不打开会话的情况下检索该值(不管它是否是最新的) 现在我正在打开会话,创建一个新对象,并将其发送给要执行的操作 // Hibernate class public class Foo { private Long id; //many-to-one mapping priv

我在Hibernate中有一个对象,其中有几个延迟加载的
多对一
列。对于一组操作,我不一定需要将对象持久化到数据库中

如何直接获取一个对象,以便每次尝试访问多对一实体时,它不需要从数据库延迟获取,并且我可以在不打开会话的情况下检索该值(不管它是否是最新的)

现在我正在打开会话,创建一个新对象,并将其发送给要执行的操作

// Hibernate class
public class Foo {
   private Long id;

   //many-to-one mapping
   private Bar barObj;

   //getters and setters
}

现在,每当我调用
fooObj.getBarObj().getId()
时,都会有一个对服务器的代理调用来获取ID的值。我不希望发生此调用,并希望本地保存
fooObj

您可以使用'fetch=FetchType.EAGER'注释参数,也可以使用一个查询进行fetch,其中明确地说'join fetch barObj'。第三,可以实现深度去氧化。这可能是最适合您的需要的,尽管它并不琐碎。

我希望保持fetch类型为lazy。因为我检索的记录很多,很少需要这样的操作。是否有一种较短的方法只获取一个特定对象然后使用第二个建议——使用HQL查询进行获取,其中您明确声明
join fetch barObj
。这是一种解决问题的方法,因为我有许多这样的对象,而且我必须处理多个连接。谢谢你,嗯。所以,您有时想要懒散地获取,有时想要急切地获取,但不想在每次获取时指定要做什么?所以你只想在分离时自动取回?@MarkoTopolnik-是的,这听起来确实像是“我想吃蛋糕,也想吃蛋糕”,但你在回答中提供了丰富的选项。特别是你给出的深度去氧化链接。