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());
}
}
}
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
- Hibernate多对一
- hibernate多对一
- hibernate多对一
- hibernate多对一...
- hibernate多对一
- hibernate 多对一
- Hibernate Gossip: 多对一
- Hibernate多对一实例
- hibernate多对一映射
- hibernate 三 多对一
- hibernate中 多对一
- hibernate 多对一关联
- Hibernate多对一级联
- hibernate多对一实例
- hibernate 单向多对一
- Hibernate的多对一
- Hibernate 多对一映射
- hibernate 多对一注解
- jquery的选择器和事件
- hibernate配置
- Python For Bioinformatics
- hibernate运用
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- hibernate多对一...
- 行人检测论文笔记:Fast Feature Pyramids for Object Detection?
- 代理模式
- Linux进程描述符task_struct结构体详解--Linux进程的管理与调度
- hibernate零散知识点
- photoshop第十章:抠图技巧以及示例
- hibernate多对多
- jVMgc-6 吞吐量收集器
- JVM了解