hibernate级联获得数据出错

问题描述

1.需求我想通过获得user,然后获得user的group的信息,但是我不知道为何出现了这样神奇的异常?2.代码package com.macrotea.hb.model;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="tb_group")public class Group { private int id; private String name; private Set<User> users=new HashSet<User>(); @Id @GeneratedValue public int getId() { return id; } public String getName() { return name; } @OneToMany( mappedBy = "group", cascade = { CascadeType.ALL } ) public Set<User> getUsers() { return users; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setUsers(Set<User> users) { this.users = users; } @Override public String toString() { return "Group [id=" + id + ", name=" + name + ", users=" + users + "]"; } }package com.macrotea.hb.model;import java.io.Serializable;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;import javax.persistence.Table;@Entity@Table(name="tb_user")public class User implements Serializable{ private int id; private String name; private Group group; @ManyToOne( cascade={CascadeType.ALL},fetch=FetchType.EAGER ) public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } @Id @GeneratedValue public int getId() { return id; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User [group=" + group + ", id=" + id + ", name=" + name + "]"; }} //main方法的测试 private static void test_lazy_get() { //准备 // @ManyToOne( // cascade={CascadeType.ALL},fetch=FetchType.EAGER // ) // @OneToMany( // mappedBy = "group", cascade = { CascadeType.ALL } // ) Session session=HibernateSessionFactory.getSession(); Transaction transaction=session.beginTransaction(); transaction.begin(); User user=(User)session.get(User.class, 1); System.out.println("user:"+user); System.out.println("user的group:"+user.getGroup().toString()); transaction.commit(); session.close(); }3.出错信息:Hibernate: select user0_.id as id1_1_, user0_.group_id as group3_1_1_, user0_.name as name1_1_, group1_.id as id0_0_, group1_.name as name0_0_ from tb_user user0_ left outer join tb_group group1_ on user0_.group_id=group1_.id where user0_.id=?Hibernate: select users0_.group_id as group3_1_, users0_.id as id1_, users0_.id as id1_0_, users0_.group_id as group3_1_0_, users0_.name as name1_0_ from tb_user users0_ where users0_.group_id=?Exception in thread "main" java.lang.StackOverflowErrorat java.lang.StringBuilder.append(StringBuilder.java:119)at java.lang.StringBuilder.<init>(StringBuilder.java:93)at com.macrotea.hb.model.Group.toString(Group.java:44)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.User.toString(User.java:43)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at java.util.AbstractCollection.toString(AbstractCollection.java:422)at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:333)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.Group.toString(Group.java:44)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.User.toString(User.java:43)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at java.util.AbstractCollection.toString(AbstractCollection.java:422)at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:333)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.Group.toString(Group.java:44)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.User.toString(User.java:43)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at java.util.AbstractCollection.toString(AbstractCollection.java:422)at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:333)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.Group.toString(Group.java:44)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.User.toString(User.java:43)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at java.util.AbstractCollection.toString(AbstractCollection.java:422)at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:333)at java.lang.String.valueOf(String.java:2826)at java.lang.StringBuilder.append(StringBuilder.java:115)at com.macrotea.hb.model.Group.toString(Group.java:44) (略)4.问题不知道是不是自己的配置出了什么问题?5.帖尾小生在此感谢了。临帖涕零,不知所言!

解决方案

toString方法不对,user打印了group,group里又打印user,无限循环,内存溢出

时间: 2024-09-16 04:10:46

hibernate级联获得数据出错的相关文章

json 返回hibernate load查询数据出错

问题描述 json 返回hibernate load查询数据出错 我用get()方法查询出来的数据print到页面不会有错!但是用load()方法查询出来的数据print到页面是就出现错误!如果在实体中设置lazy=""false""也不会出错!哪位高手给说明一下原因, 解决方案 懒加载呗........ 解决方案二: 那怎么解决,不会是每一个实体中都设置lazy=""false""吧 解决方案三: 看下load和get的区别

hibernate 级联删除问题

问题描述 小女子大问题====hibernate级联删除问题====现有相册(Album)和照片2个表(Photo)我想在删除相册的同时删除相册里所有的照片两个表的实体和映射如下publicclassAlbumimplementsSerializable{privateintid;privateStringname;//名称privateStringdescription;//描述privateStringpwd;//密码privateAlbumStatealbumState;//状态多对一单向

hibernate 如何插入数据到多对多的中间表中

问题描述 hibernate 如何插入数据到多对多的中间表中 hibernate 如何插入数据到多对多的中间表中 关联表已经存在,只是需要在中间表中插入数据 解决方案 全靠自动不用手动,在配置文件里配置好many-to-many的关系 解决方案二: 这种中间表一般都是用手动的..jdbcTemplate来插入的 解决方案三: 使用HibernateCallback,因为该类可以获取到session并且被HibernateCTemplate调用,拿到了session你就应该知道怎么做了. 解决方案

Excel多表数据出错怎么办

  Excel多表数据出错怎么办          用个例子说话:下面的这个Excel工作簿是向员工发放工资通知的原始表集合,Sheet1到Sheet4从分别保存4个不同部门的员工记录,这些员工均住在"万寿南路",但由于录入人员的疏忽,统统都输成了万寿路,虽然缺少一个字,但所有表格的地址都错了.现在需要快速地将所有表中的"万寿路"前加一个"南",如何实现快速添加? 首先按下Ctrl+H组合键,打开"查找和替换"对话框. 在文本

Excel如何设置数据出错警告

  Excel如何设置数据出错警告?Excel表格的单元格数据有效性是一个非常好用的功能,设置数据有效性可以减少输入数据时出现差错.限定数据的长短(如手机号码),介于某种数值之间(如身高),要求某种格式(如日期),只能固定输入几个选择(如性别.学历)等都需要用到数据有效性. 方法/步骤 数据>数据验证,即可找到该功能. 性别的数据有效性设置 选择性别一列,希望这里只能固定输入"男"或者"女",如下图填写内容.来源那里的","必须是英文状态下

win7系统中excel导入外部数据出错的解决方法

  在我们平常办公中,最常用的软件是什么?当然是office软件中的word文档.Execl表格和PPT了,在需要用到文字的时候我们选择word,在做数字统计时用execl,演示图片时使用PPT,这三种办公软件是我们常见的.但是最近有win7的用户来反映说,在用excel导入外部数据时老是出错,无法导入成功,这样不仅损坏外部数据,而且也影响我们的办公效率.下面小编来教大家一招,如何在win7系统电脑中导入外部的数据.   win7系统中excel导入外部数据出错的解决方法如下: 1.首先,咱们需

springmvc-请教:Spring + Hibernate 无法将数据写入数据库?

问题描述 请教:Spring + Hibernate 无法将数据写入数据库? Spring + Hibernate 无法将数据写入数据 请教: 通过Junit单元测试Service可以将数据写入数据库:但部署访问却无法向数据库写入数据. 1 环境: Spring 3.1.2 Hibernate 4.1.4 Jdk1.6 2 配置: 2.1 Web.xml <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后面的Spring C

rcale游标超出-hibernate处理的数据量太多,会报游标超出的错误。求大神帮忙

问题描述 hibernate处理的数据量太多,会报游标超出的错误.求大神帮忙 public List getMessageCount(String agentIdDate detectingTimeDate endTime) { StringBuffer sbf = new StringBuffer(); sbf.append(""select targetAddresssourceaddress count(targetAddress) from VpnRecord where 1=

sql server-sqlserver跨服务器更新数据出错,求大神解答

问题描述 sqlserver跨服务器更新数据出错,求大神解答 sqlserver在跨服务器更新数据时报这个错,图片中的日文可以先忽略,有遇到报图片中相同英文内容的大神给解答解答 ![图片说明](http://img.ask.csdn.net/upload/201509/27/1443353882_746795.png) 解决方案 这看上去根本不是sql server的错误,而是Silverlight的错误.你的Silverlight丢出了异步的错误,没有捕获到.具体要看你的代码. 解决方案二: