首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

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

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 />
</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();

}


?

热点排行