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

时间:2015-08-28 15:53:03

标签: java hibernate

我正在使用Hibernate 4,启用了延迟加载。我有一个基本实体,包含对其他对象的引用。以下是一个简单的例子:


    @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

如何判断boss属性返回的Employee实体是代理还是实际实体?

我真的想要一个答案,所以我可以做类似下面的代码:


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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

Hibernate.isInitialized(emp)