Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Hibernate 分离对象时休眠良好实践_Hibernate_Coding Style_Persistence - Fatal编程技术网

Hibernate 分离对象时休眠良好实践

Hibernate 分离对象时休眠良好实践,hibernate,coding-style,persistence,Hibernate,Coding Style,Persistence,构造hibernate查询后,我的代码如下所示: @SuppressWarnings("unchecked") List<SendCommands> list = query.list(); session.evict( list ); if( list.isEmpty() ) return null; SendCommands dst = list.get( 0 ); return dst; @SuppressWarnings(“未选中”) List=query.List

构造hibernate查询后,我的代码如下所示:

@SuppressWarnings("unchecked")
List<SendCommands> list = query.list();
session.evict( list );
if( list.isEmpty() ) 
   return null;
SendCommands dst = list.get( 0 );
return dst;
@SuppressWarnings(“未选中”)
List=query.List();
会议.驱逐(名单);
if(list.isEmpty())
返回null;
SendCommands dst=list.get(0);
返回dst;
本例的“良好”做法是什么:

1) 分离(逐出)整个结果集,然后返回该集的第一个对象,或

2) 仅分离(逐出)集合的第一个对象:

@SuppressWarnings("unchecked")
List<SendCommands> list = query.list();
if ( list.isEmpty() ) 
    return null;
SendCommands dst = list.get( 0 );
session.evict( dst );
return dst;
@SuppressWarnings(“未选中”)
List=query.List();
if(list.isEmpty())
返回null;
SendCommands dst=list.get(0);
会议.驱逐(dst);
返回dst;

您不需要分离对象。Hibernate实体是POJO,在事务结束时不会丢失。当会话关闭时,它们将自动分离。但是您仍然可以使用then并访问他们的数据,除非数据被标记为延迟加载,并且在连接实体时还没有被提取。

您到底想实现什么?为什么需要拆离对象?我需要拆离对象以将其传递到另一层。根据文档,这些对象将在事务结束时丢失,这就是为什么我要分离它们。谢谢!你能告诉我如果它有一个延迟加载字段,并且会话被关闭,会发生什么吗。此字段是否会成为空指针?或者Hibernate会抛出异常?另外:如果我没有分离一个对象,返回它,然后在其他地方(同一个会话,不同的线程)更新它。返回值是否会更改?您将得到一个LazyInitializationException。你的第二个问题没有真正意义,因为你不应该在不同的线程中使用同一个会话。会话是单线程的。这是使用Hibernate时的基本但非常重要的内容。您肯定应该阅读hibernate参考文档,其中描述了所有这些内容: