【问题标题】:How to detach persistent attributes of a Hibernate object如何分离 Hibernate 对象的持久属性
【发布时间】:2012-04-21 08:14:14
【问题描述】:

我在 Hibernate 中有一个对象,其中包含一些延迟加载的 many-to-one 列。我不一定需要将对象与数据库一起持久化以进行一组操作。

我如何直接获取一个对象,这样每次我尝试访问多对一实体时,它都不需要从数据库中懒惰地获取,并且我可以检索该值(如果不是最新)没有打开会话。

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

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

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

   //getters and setters
}

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

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您可以使用 'fetch=FetchType.EAGER' 注释参数,也可以使用明确表示“join fetch barObj”的查询来获取。第三,您可以write some code 实现深度代理。这可能最适合您的需求,尽管远非微不足道。

    【讨论】:

    • 我想让 fetch 类型保持惰性。由于我检索的记录很多,很少需要这样的操作。有没有更短的方法来获取一个特定的对象
    • 然后使用第二个建议 - 使用 HQL 查询获取您明确声明 join fetch barObj
    • 这是解决问题的方法,因为我有很多这样的对象,并且我必须处理多个连接。还是谢谢
    • 嗯。所以你想有时懒惰,有时急切地获取,但不想在每次获取时指定要做什么?所以你只想在分离时自动获取?
    • @MarkoTopolnik - 是的,这听起来确实像是“我想吃我的蛋糕,也想拥有它”,但赞成你在答案中提供的丰富选择。特别是您提供的深度代理链接。
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2021-11-07
    • 2014-09-11
    • 2016-02-17
    • 2014-10-13
    相关资源
    最近更新 更多