plhxxf10 2016-01-09 10:34 采纳率: 100%
浏览 1494
已采纳

hibernate 求各位大神 帮忙看一下

我做的一个Hibernate 一对多 多对一的 保存和读取操作 保存 没问题 但是 读取那老是提示 内存溢出
下面是 实体类
Department 类 有setter 和getter 方法
private Integer id;
private String name;
private Set employees=new HashSet();

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Set<Employee> getEmployees() {
    return employees;
}
public void setEmployees(Set<Employee> employees) {
    this.employees = employees;
}

Emloyee 类   有setter 和getter 方法

private Integer id;
private String name;
private Department department;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Department getDepartment() {
    return department;
}
public void setDepartment(Department department) {
    this.department = department;
}

下面是映射类

Department.hbm.xml

<class name="Department" table="department">
    <id name="id">
        <generator class="native"/>
    </id>

    <property name="name" type="string" column="name" />

<set name="employees">
    <key column="departmentId"></key>
    <one-to-many  class="Employee"/>
</set>      
</class>


Employee.hbm.xml

<class name="Employee" table="employee">
    <id name="id">
        <generator class="native" />
    </id>

    <property name="name" type="string"  column="name" />

<many-to-one name="department" class="Department" column="departmentId"></many-to-one>


</class>

下面是测试类

private static SessionFactory sessionFactory;
static{
sessionFactory=new Configuration()//
.configure()//

.buildSessionFactory();
}

@Test
public void testget() throws Exception{

Session session=sessionFactory.openSession();
session.beginTransaction();

Department department=(Department) session.get(Department.class, 1);

System.out.println(department);

System.out.println(department.getEmployees());
session.getTransaction().commit();
session.close();
}

hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
<!-- 数据库基本配置信息 -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///htest</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>


<!-- 数据库其他相关配置 -->
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>

<mapping  resource="org/xxf/OneToManyA/Department.hbm.xml"/>
<mapping  resource="org/xxf/OneToManyA/Employee.hbm.xml"/>

</session-factory>
</hibernate-configuration>

测试后   它就老提示  我内存溢出
java.lang.StackOverflowError
at java.lang.Integer.toString(Integer.java:305)
at java.lang.Integer.toString(Integer.java:116)
at java.lang.String.valueOf(String.java:2932)
at java.lang.Integer.toString(Integer.java:682)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at org.xxf.OneToManyA.Employee.toString(Employee.java:13)
at java.lang.String.valueOf(String.java:2827)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at java.util.AbstractCollection.toString(AbstractCollection.java:422)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:327)

往下 就一直重复出现错误     
别人用一样的代码  测试就没问题  我就老报错  求各位大神帮指导一下
  • 写回答

3条回答 默认 最新

  • gloomyfish 博客专家认证 2016-01-10 02:44
    关注

    你不是内存溢出,是栈溢出,因为你的里面有循环调用,我看了一下
    org.xxf.OneToManyA.Employee.toString(Employee.java:13)
    你是不是重载了toString方法,因为你没有贴出全部代码,
    你的toString方法中存在循环调用,这个是你遇到stackoverflow的原因!!!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题