Hibernate 一对多出现低级有关问题因为po实现了hashcode和equals方法这里设置的Id做比较

Hibernate 一对多出现低级问题因为po实现了hashcode和equals方法这里设置的Id做比较

1.Hibernate中一对多的双向关联
     <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="T_Orgnization" name="com.love.oa.model.Orgnization">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<property name="sn" />
<many-to-one name="parent"  column="pid"/>//多对一  *------1
<set name="chilren" inverse="true" cascade="all">//一对多 1----*
<key column="pid"/>
<one-to-many class="com.love.oa.model.Orgnization"/>
</set>

</class>
</hibernate-mapping>

 

 

package com.love.oa.model;

 

import java.io.Serializable;

import java.util.Set;

 

/**

 * @hibernate.class table="T_Orgnization"

 */

public class Orgnization implements Serializable {

/**

* @hibernate.id

* generator-class="native"

*/

private int id;

/**

* @hibernate.property

*/

private String name;

/**

* @hibernate.property

*/

private String sn;

/**

* @hibernate.many-to-one

* column="pid"

*/

private Orgnization parent;

/**

* @hibernate.set

* @hibernate.key column="pid"

* @hibernate.one-to-many class="com.love.oa.model.Orgnization"

*/

private Set chilren;

 

public int getId() {

return id;

}

 

public void setId(int id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public String getSn() {

return sn;

}

 

public void setSn(String sn) {

this.sn = sn;

}

 

public Orgnization getParent() {

return parent;

}

 

public void setParent(Orgnization parent) {

this.parent = parent;

}

 

public Set getChilren() {

return chilren;

}

 

public void setChilren(Set chilren) {

this.chilren = chilren;

}

 

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + id;

return result;

}

 

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

final Orgnization other = (Orgnization) obj;

if (id != other.id)

return false;

return true;

}

}

 

我在测试插入数据库的时候

 

@SuppressWarnings("unchecked")

public void testAddOrgination() throws Exception {

 

Session session = baseDao.getSessionFactory().openSession();

Transaction transaction = session.beginTransaction();

Set hashSet = new HashSet();

Orgnization org1 = new Orgnization();

org1.setName("开发部");

org1.setSn("111");

org1.setParent(null);

Orgnization org2 = new Orgnization();

org2.setName("开发部1");

org2.setSn("222");

org2.setParent(org1);

hashSet.add(org2);

//se.save(org2);

 

Orgnization org3 = new Orgnization();

org3.setName("开发部2"); 

org3.setSn("333");

org3.setParent(org1);

//se.save(org3);

hashSet.add(org3);

System.out.println(hashSet.size());

//这里的结果始终是1,因为po实现了hashcode和equals方法这里设置的Id做比较,这里就会出现一个插入数据库的时候少一条数据,因为Set集合不能插入重复的数据,这里我要实现树状结构,所以ID是相同的,造成了插入的数据不对。悲剧了啊!真的悲剧。。。

org1.setChilren(hashSet);

session.save(org1);

transaction.commit();

session.close();

}