hibernate多对一...

来源:互联网 发布:js div 加span 编辑:程序博客网 时间:2024/05/08 02:34
1.创建或修改表


hibernate.cfg.xml文件:


<property name="hbm2ddl.auto">update</property>
没有表就创建表,有表就修改表
<property name="hbm2ddl.auto">create</property>
没有表就创建表,有表就覆盖


2.新建两张表


create table person(personid number,addressid number);


create table address(addressid number);


用hibernate编写多对一配置文件
--------------------------------------------------------------
Person.java:


private int personid;
private Address address;


Address.java:

private int addressid;


--------------------------------------------------------------
Person.hbm.xml文件:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="many2one.Person"  table="Person" schema="herbst">
<id name="personid" column="personid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
<many-to-one name="address" column="addressid" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
----------------------------------------------------------------
Address.hbm.xml文件:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="many2one.Address" table="Address" schema="herbst">
<id name="addressid" column="addressid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
</class>
</hibernate-mapping>
---------------------------------------------------------------------
如果只进行Address的添加,则只添加Address
如果只进行Person的添加,则Person和Address都会添加


-------------------------------------------------------------------------
2.一对一


只需要把上面多对一的Person.hbm,xml文件改一处


<hibernate-mapping>
    <class name="one2one.Person" schema="NEIL">
    <id name="personid" >
    <generator class="assigned"></generator>
    </id>
    <!-- 一个对象引用,一对一引用,在多对一情况下,加一个唯一约束 -->
    <many-to-one name="address" unique="true"  cascade="all"/>
    </class>
</hibernate-mapping>


------------------------------------------------------------------------


3.一对多(不推荐)


-------------------------------------------------------------------------
Student.java:


package one2many;


public class Student {
private int sid;
private String sname;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}

}
-----------------------------------------------------------------------------
Teacher.java:


package one2many;


import java.util.HashSet;
import java.util.Set;


public class Teacher {
private int tid;
private String tname;

private Set<Student> students = new HashSet<Student>();


public int getTid() {
return tid;
}


public void setTid(int tid) {
this.tid = tid;
}


public String getTname() {
return tname;
}


public void setTname(String tname) {
this.tname = tname;
}


public Set<Student> getStudents() {
return students;
}


public void setStudents(Set<Student> students) {
this.students = students;
}
}
-------------------------------------------------------------------------------------
Student.hbm.xml:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="one2many.Student" schema="herbst">
<id name="sid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
<property name="sname"></property>
</class>
</hibernate-mapping>


---------------------------------------------------------------------------------------
Teacher.hbm.xml:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="one2many.Teacher" schema="herbst">
<id name="tid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
<property name="tnames"></property>
<set name="students">
<key column="sid"></key>
<one-to-many class="one2many.Student"/>
</set>
</class>
</hibernate-mapping>
--------------------------------------------------------------------------------------------
Test.java:


package one2many;


import java.util.HashSet;
import java.util.Set;


import many2one.HibernateSessionFactory;


import org.hibernate.Session;


public class Test {
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();

Teacher teacher = new Teacher();
teacher.setTid(1);
teacher.setTname("tname");

//准备三个学生
Student s1 = new Student();
s1.setSid(1);
s1.setSname("sname1");
Student s2 = new Student();
s2.setSid(200);
s2.setSname("sname2");
Student s3 = new Student();
s3.setSid(300);
s3.setSname("sname3");

Set<Student> students = new HashSet<Student>();
students.add(s1);
students.add(s2);
students.add(s3);

teacher.setStudents(students);
//保存老师
session.save(teacher);

session.beginTransaction().commit();
}
}


----------------------------------------------------------------------------------
4.双向关联(一对多和多对一)


Teacher.java:


package domain;


import java.util.HashSet;
import java.util.Set;


public class Teacher implements java.io.Serializable{


/**

*/
private static final long serialVersionUID = 1L;
private int tid;
private String tname;

private Set<Student> students = new HashSet<Student>();


public int getTid() {
return tid;
}


public void setTid(int tid) {
this.tid = tid;
}


public String getTname() {
return tname;
}


public void setTname(String tname) {
this.tname = tname;
}


public Set<Student> getStudents() {
return students;
}


public void setStudents(Set<Student> students) {
this.students = students;
}


}
----------------------------------------------------------------------------
Student.java:


package domain;


public class Student implements java.io.Serializable{


/**

*/
private static final long serialVersionUID = 1L;
private int sid;
private String sname;
private Teacher teacher;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}


}
-------------------------------------------------------------------------------------
Teacher.hbm.xml:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="domain.Teacher" schema="herbst">
<id name="tid">
<generator class="assigned"></generator>
</id>
<property name="tname"></property>
<set name="students" cascade="all" inverse="true">
<key column="tid"></key>
<one-to-many class="domain.Student"/>
</set>
</class>
</hibernate-mapping>
------------------------------------------------------------------------------------------
Student.hbm.xml:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="domain.Student" schema="herbst">
<id name="sid" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
<property name="sname" type="java.lang.String"></property>
<many-to-one name="teacher" column="tid" cascade="all"></many-to-one>
</class>
</hibernate-mapping>
----------------------------------------------------------------------------------------------
Test.java:


package domain;


import java.util.Iterator;
import java.util.Set;


import org.hibernate.Session;


import domain.Student;


public class Test {
public static void main(String[] args) {
// Student s1 = new Student();
// s1.setSid(1);
// s1.setSname("s1");
//
// Student s2 = new Student();
// s2.setSid(2);
// s2.setSname("s2");
//
// Student s3 = new Student();
// s3.setSid(3);
// s3.setSname("s3");
//
// Teacher teacher = new Teacher();
// teacher.setTid(101);
// teacher.setTname("t101");
// teacher.getStudents().add(s1);
// teacher.getStudents().add(s2);
// teacher.getStudents().add(s3);
//
// s1.setTeacher(teacher);
// s2.setTeacher(teacher);
// s3.setTeacher(teacher);
// //添加老师:双向关联
// Session session = HibernateSessionFactory.getSession();
// session.save(teacher);//测试一关联多,成功
// session.beginTransaction().commit();
//
// session.save(s1);//测试多关联一,成功
// session.save(s2);//测试多关联一,成功
// session.save(s3);//测试多关联一,成功
// session.beginTransaction().commit();

//查询
//测试查询一的一方
Session session = HibernateSessionFactory.getSession();
Teacher t = (Teacher) session.load(Teacher.class, 101);
System.out.println(t.getTname());
Set<Student> students = t.getStudents();
Iterator<Student> iterator = students.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
System.out.println(student.getSname());

}
}
}

0 0
原创粉丝点击