`
liuguofeng
  • 浏览: 450441 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

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

}


 

分享到:
评论

相关推荐

    hashcode和equals方法

    equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.

    set接口经常用的hashCode和equals方法详解

    假设我们有一个自定义类`Person`,我们需要为其实现`hashCode`和`equals`方法: ```java public class Person { private String name; private int age; // 构造函数和其他方法省略... @Override public ...

    java中hashcode和equals的详解.pdf

    通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java 集合的实现原理和哈希表的工作机制。 一、hashCode 方法简介 hashCode 方法是 Java 中 Object 类的一个方法,用于返回对象的哈希码值。这个...

    关于hashCode()和equals()的本质区别和联系

    在 Java 中,有很多类忽略了 hashCode() 和 equals() 方法的默认实现,以便提供更深层次的语义可比性。例如,Integer 类重写了 equals() 方法,使得两个 Integer 对象可以根据其整数值进行比较。这种基于值的 Equal ...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...

    HashCode相同equals不同的2位字符集合算法

    在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...

    java中hashcode()和equals()方法详解

    - 相反,如果两个对象的`hashCode()`值相同,并不能保证这两个对象通过`equals()`方法比较也是相等的。这是因为可能存在不同的对象具有相同的哈希值,这种情况称为哈希冲突。 - 为了避免哈希冲突带来的性能问题,在...

    hashcode和equals的分析

    ### hashCode和equals方法详解 #### 一、hashCode方法解析 在深入探讨`hashCode`方法之前,我们需要了解Java集合框架的基本概念。Java集合框架主要包括两大类集合:`List`和`Set`。 - **List**:这是一个有序集合...

    Java理论与实践:hashCode()和equals()方法

    本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...

    Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。  hashCode()和equals()定义在Object类中,这...

    equals与hashCode方法讲解

    equals 方法和 hashCode 方法都是用于比较两个对象是否相等的,但它们的实现方式不同。equals 方法是比较两个对象的内容是否相等,而 hashCode 方法是根据对象的内容来计算哈希码。在实际开发中,我们需要根据具体...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    hashcode()和equals()

    在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 或 `HashSet`)时。这两个方法来源于 `Object` 类,是所有Java类的基类,因此,每个自定义类...

    重写hashCode()和equals()方法详细介绍

    在Java编程中,`equals()` 和 `hashCode()` 方法是Object类中的两个重要方法,它们在处理对象相等性以及在哈希表(如HashSet、HashMap)中起到关键作用。当自定义类时,有时需要根据业务逻辑重写这两个方法以满足...

    Java中equals,hashcode和==的区别

    Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个运算符,用于比较两个对象的内存地址是否...

    关于重写equals,hashcode以及compareTo方法!

    关于重写equals、hashcode以及compareTo方法! equals()方法是Object类中的一个方法,它用于比较两个对象是否相等。然而,它的默认实现是比较对象的引用(地址),而不是比较对象的实际内容。因此,在某些情况下,...

    equals,hashcode,toString

    在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...

    关于Object中equals方法和hashCode方法判断的分析

    "关于Object中equals方法和hashCode方法判断...equals 和 hashCode 方法都是用于比较两个对象是否相同的,但它们的实现机理和作用域却有所不同。通过重写这两个方法,我们可以更好地比较对象的内容,并避免对象的重复。

    equals与hashCode在实际开发中的重写写法

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的成员,尤其是在处理对象比较和集合操作时。这两个方法通常与`Object`类中的默认实现相关联,但为了在实际开发中实现正确的对象比较和哈希表操作...

    Java中的equals和hashCode方法详解1

    如果两个对象通过`equals()`方法比较后相等,那么它们的`hashCode()`方法必须返回相同的值。这是因为哈希表(如`HashSet`)依赖于`equals()`和`hashCode()`的一致性来正确地存储和查找对象。如果两个对象相等但它们...

Global site tag (gtag.js) - Google Analytics