Hibernate 分离对象时休眠良好实践
构造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
@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参考文档,其中描述了所有这些内容: