当前位置: 首页 > 知识库问答 >
问题:

如何判断Hibernate4实体是代理实体还是实际实体?

羊舌旭尧
2023-03-14

我使用的是Hibernate4,启用了惰性加载。我有一个包含对其他对象的引用的基本实体。下面是一个简单的例子:


    @Entity
    public class Employee{
        public int id;
        public String name;
        public Employee boss;
        //more code follows
    }

当我从数据库加载Employee实体时,boss对象由一个Hibernate代理对象表示,这是由于延迟加载的原因。稍后我需要访问boss属性,该属性可能在加载它的同一会话中,也可能不在同一会话中。如果我尝试使用boss对象,但它还没有加载,而我处于不同的位置,我将得到以下错误:


Cause: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

我真的想要一个答案,这样我就可以做类似以下代码的事情:


    public Strin getBossName(Employee emp){
        Employee boss;
        if(isProxy(emp){
            boss = getBossFromDatabase(emp);
        }else{
            boss = emp.getBoss();
        }enter code here
        return boss.getName();
    }

提前道谢!

共有1个答案

冯嘉荣
2023-03-14

Hibernate在Hibernate类中提供了这样的功能:

Hibernate.isInitialized(emp)
 类似资料:
  • 本文向大家介绍ViewPager判断是向左划还是右划的实例,包括了ViewPager判断是向左划还是右划的实例的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇ViewPager判断是向左划还是右划的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我的远程接口是: 我的EJB实现是: 每次当我调用实体方法getFileId()时, 编辑: 当我试图使用JPA2.0提供的方法访问实体的主键时: 我得到了同样的错误回报。烦人??

  • 问题内容: 在Hibernate期间,我正在加载一些对象,由于延迟加载,其中一些对象已作为代理加载。一切正常,我不想关闭延迟加载。 但是稍后我需要通过RPC将一些对象(实际上是一个对象)发送到GWT客户端。碰巧这个具体对象是代理。所以我需要将其变成一个真实的对象。我在Hibernate中找不到类似“实现”的方法。 我如何才能将某些对象从代理变为真实,从而知道它们的类和ID? 目前,我看到的唯一解决

  • 我有一个JPA项目(Eclipse Link),工作正常,但我想持久化一个不是实体的类(或在相同的持久化上下文中不是实体),目前我持久化引用id,然后我执行调用以检索对象。我需要知道什么是最好的方式做到这一点…我不希望在bean中添加代码作为侦听器事件,因为我希望有一个干净的bean(构造、属性、不带注释的setter和getter), 我的想法是扩展PersistenceContext(但是,我

  • 问题内容: 对于MySQL / SQL的分配,我需要创建2个不同的表以显示 强实体和弱实体之间 的 差异 。 有人可以向我展示我如何做到这一点的例子吗? 我知道一个强实体可以不存在另一个实体而存在,而对于一个弱实体却不是这样。因此,例如,一个强大的实体如下所示: ? 但是我不确定如何创建一个显示差异的表。 问题答案: 想象一下带有以下各列的表: 该表如下所示: 现在,每个 Manager都是一个E

  • 但问题是这将只锁定一行,而我想在计算总行数时锁定整个表(实体)。 请指教。