Java 冬眠和玻璃鱼懒散
我有一个Java Web应用程序项目,计划将Glassfish的功能输出到PHP(nuSOAP) 我已经在mySQL中创建了我的BD、所有表、关系、主键和外键 之后,我打开我的NetBeans,newproject->javaweb应用程序 我所做的步骤是Java 冬眠和玻璃鱼懒散,java,hibernate,glassfish,lazy-loading,Java,Hibernate,Glassfish,Lazy Loading,我有一个Java Web应用程序项目,计划将Glassfish的功能输出到PHP(nuSOAP) 我已经在mySQL中创建了我的BD、所有表、关系、主键和外键 之后,我打开我的NetBeans,newproject->javaweb应用程序 我所做的步骤是 首先创建Hibernate配置向导,然后创建Hibernate反向工程向导,然后从数据库创建Hibernate映射文件和POJO,最后创建Hibernate EUTIL(命名连接) 我的实体是:俱乐部一对多等级一对多团队一对多球员 所以,现在
首先创建Hibernate配置向导,然后创建Hibernate反向工程向导,然后从数据库创建Hibernate映射文件和POJO,最后创建Hibernate EUTIL(命名连接) 我的实体是:俱乐部一对多等级一对多团队一对多球员 所以,现在我的Java项目中有了所有的实体。并为俱乐部创建了一个DAO:
public List<Club> listClubs(){
try{
session.beginTransaction();
List<Club> listClub = (List<Club>)session.createQuery("from Club").list();
session.getTransaction().commit();
session.close();
return listClub;
}catch(Exception e){
System.out.println("Erro ao listar os clubes");
System.out.println(e.getMessage());
}
return null;
}
当我得到服务器日志时,我看到:
> SEVERE: failed to lazily initialize a collection of role: pt.dai.entities.Club.grades, no session or session was closed
我已经在互联网上搜索了这个错误,我已经解决了将实体的xml更改为默认值lazy='false'的问题,但是当这将所有俱乐部信息返回到PHP时,我的nuSOAP将与大量数据分离
如何使用lazzyLoad并将数据发送到WebService
谢谢你的帮助 看起来这不是延迟加载问题 延迟加载允许您不从数据库中读取嵌套实体,而不会显式地对其进行寻址 在您的情况下,即使使用延迟加载,您也将尝试发送所有数据,因此所有这些数据都将从数据库中读取 如果您不想发送所有信息,那么应该限制您的查询。否则,您可以将数据拆分为几个部分并单独发送
编辑:删除关系是最简单但并不令人满意的解决方案 问题的根源在于序列化。看起来您的实体具有双向或循环关系。您需要通过删除冗余关系或将所有此类类成员标记为瞬态(这会禁止它们的序列化)来解决此问题
另外,如果您不关闭Hibernate会话,它将不会被释放,也不会返回连接池。几分钟后,您的连接池将为空,并且在等待空闲会话时,您将来的所有查询都将挂起。如何修复此问题?删除关系?嗨,谢谢Maksim,要做到这一点,我只需要在课程开始时做一个注释?比如说“暂时的”,不@瞬态是JPA注释。这意味着该字段不会被持久化,而Java的transient关键字意味着该字段不会被序列化。例如:“private transient int myInt=0;”我,我已经用transient解决了这个问题,但是现在我有一个问题:看,我有球员->团队->教练->人力资源,球员也有人力资源参考。在本例中(列出所有玩家),我在Teams方法中放置了一个XMLTransient:getCoachs,但是如果我想列出包含教练信息的所有团队,我需要再次添加该Transient。我怎样才能解决这个问题呢?首先,如果我以前的答案对你有帮助,如果你能投票或者把它标为正确答案,那就太好了。关于您的第二个问题,如果您使用适当的代码片段创建新的问题会更好。我所能建议的最简单的解决方案是将
ID
s的Coachs
存储到Teams
类中。此类ID将被序列化,因此您可以在单独的web-request中请求ID所需的真实Coach
。如果我对会话提交和会话关闭进行注释,则错误将更改,然后给出“在对象图中检测到一个循环。这将导致无限深的XML:”
> Service invocation threw an exception with message : null; Refer to the server log for more details
> SEVERE: failed to lazily initialize a collection of role: pt.dai.entities.Club.grades, no session or session was closed