Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠->;获取惰性对象_Java_Hibernate_Session_Orm - Fatal编程技术网

Java 冬眠->;获取惰性对象

Java 冬眠->;获取惰性对象,java,hibernate,session,orm,Java,Hibernate,Session,Orm,嗨,我有一个问题,我不知道,如果可能的话。我有一把刀。我有一个实体,我定义了经典的OneToMany assoc @OneToMany public Set<InterviewEntity> getCreatedInterviews() { return createdInterviews; } 我只想这样: @Override public T findById(long id) { Session session = sess

嗨,我有一个问题,我不知道,如果可能的话。我有一把刀。我有一个实体,我定义了经典的OneToMany assoc

@OneToMany
public Set<InterviewEntity> getCreatedInterviews() {
        return createdInterviews;
    } 
我只想这样:

 @Override
    public T findById(long id) {
        Session session = sessionFactory.openSession();
        T entity = (T) session.get(thisClass, id);
        session.close();

        return entity;
    }
EmployeeEntity resultEmployee = employeeDao.findById(employeeEntity.getEmployeeId());
     resultEmployee.getCreatedInterviews();

我可以使用Hibernate.initialize()在具体的Dao类中@Override方法findById,但我认为这不太实际。有人知道吗?

您的代码在实体检索后立即关闭
会话
,因此您的
ResultTemployee.getCreatedInterviews()
将无法工作,因为没有打开的会话

我认为您的问题不是使用延迟加载,而是耦合会话管理代码和DAO代码

如果正确使用HibernateLazy特性,它会很好。尝试在业务级别而不是DAO级别解耦会话管理。我的意思是,当您从视图调用某些业务逻辑时:

  • 然后启动/打开会话
  • 启动/打开事务
  • 执行您想要的操作:检索实体、获取关联、更改数据
  • 提交/回滚事务
  • 刷新和关闭会话
如果您想将数据从业务移动到视图,请使用VO/DTO来避免延迟问题

这样,您将拥有漂亮、清晰和可维护的代码

希望有帮助

延迟加载并不意味着“永远不会加载集合”。这意味着“只有在您真正需要集合时,调用集合上的方法时,才会加载集合”。除非在尝试访问集合之前关闭会话,否则执行所需操作没有问题。