1、多对一关联

xml配置

1)、一个组可以有多个用户,一个用户所以一个主。User表与Group表的关系是多对已

User表

package com.mr.cheng.associations;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Table(name="t_user")
public class User {private int id;private String name;private Group group;public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}@Id@GeneratedValuepublic 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;}
}

  Group表

package com.mr.cheng.associations;import java.util.HashSet;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;@Entity
@Table(name="t_group")
public class Group {private int id;private String name;@Id@GeneratedValuepublic 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;}
}

  User.hbm.<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjsxt.hibernate.User" table="t_user"><id name="id"><generator class="native"></generator></id><property name="name"></property><many-to-one name="group" column="groupId"></many-to-one></class></hibernate-mapping>

  Group.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.Group" table="tt_group"><id name="id"><generator class="native"></generator></id><property name="name"></property></class></hibernate-mapping>

  2)、一对多配置

  在Group对象中加一个Set类型的字段,代码如下

package com.mr.cheng.associations;import java.util.HashSet;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;@Entity
@Table(name="t_group")
public class Group {private int id;private String name;private Set<User> userSet = new HashSet<User>();public Set<User> getUserSet() {return userSet;}public void setUserSet(Set<User> userSet) {this.userSet = userSet;}@Id@GeneratedValuepublic 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;}
}

Group.hbm.xml配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.Group" table="tt_group"><id name="id"><generator class="native"></generator></id><property name="name"></property><set name="userSet"><key column="groupId"></key><one-to-many class="com.mr.cheng.associations.User"/></set></class></hibernate-mapping>

  配置一对多时,在Group.hbm.xml文件中set属性名字对应Group的字段,key中的Column属性对应外键名字,即是通过groupId进行关联。 one-to-many 中的class对应关联的类。

  User表

package com.mr.cheng.associations;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Table(name="t_user")
public class User {private int id;private String name;@Id@GeneratedValuepublic 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;}
}

  User.hbm.xml配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.User" table="tt_user"><id name="id"><generator class="native"></generator></id><property name="name"></property></class></hibernate-mapping>

  

3)、多对一 与 已对多双向关联

User 对象代码如下:

package com.mr.cheng.associations;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Table(name="t_user")
public class User {private int id;private String name;private Group group;public Group getGroup() {return group;}public void setGroup(Group group) {this.group = group;}@Id@GeneratedValuepublic 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;}
}

 Group对象代码如下: 

package com.mr.cheng.associations;import java.util.HashSet;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;@Entity
@Table(name="t_group")
public class Group {private int id;private String name;private Set<User> userSet = new HashSet<User>();public Set<User> getUserSet() {return userSet;}public void setUserSet(Set<User> userSet) {this.userSet = userSet;}@Id@GeneratedValuepublic 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;}
}

  User.hbm.xml配日志如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.User" table="tt_user"><id name="id"><generator class="native"></generator></id><property name="name"></property><many-to-one name="group" column="groupId"></many-to-one></class></hibernate-mapping>

  Group.hbm.xml配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.Group" table="tt_group"><id name="id"><generator class="native"></generator></id><property name="name"></property><set name="userSet"><key column="groupId"></key><one-to-many class="com.mr.cheng.associations.User"/></set></class></hibernate-mapping>

  注意:group.hbm.xml中的一对多配置时 key 中column属性的值必须与User.hbm.xml中的 many-to-one属性中的name值一直。否则出现意想不到的结果。

4)、多对多双向关联

一个用户可以选择多个房间,一个房间可以住多个人,因此User表与Room表的关系就为多对多的关系。

User对象代码如下:

package com.mr.cheng.associations;import java.util.HashSet;
import java.util.Set;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Table(name="t_user")
public class User {private int id;private String name;private Set<Room> roomSet = new HashSet<Room>();public Set<Room> getRoomSet() {return roomSet;}public void setRoomSet(Set<Room> roomSet) {this.roomSet = roomSet;}@Id@GeneratedValuepublic 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;}
}

  Room对象的代码如下:

package com.mr.cheng.associations;import java.util.HashSet;
import java.util.Set;public class Room {private int id;private String name;private Set<User> userSet = new HashSet<User>();public Set<User> getUserSet() {return userSet;}public void setUserSet(Set<User> userSet) {this.userSet = userSet;}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;}
}

  User.hbm.xml的配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.User" table="tt_user"><id name="id" column="userId"><generator class="native"></generator></id><property name="name"></property><set name="roomSet" inverse="true" table="tt_user_room"><key column="userId"></key><many-to-many class="com.mr.cheng.associations.Room" column="roomId"></many-to-many></set></class></hibernate-mapping>

  Room.hbm.xml的配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.mr.cheng.associations.Room" table="tt_room"><id name="id" column="roomId"><generator class="native"></generator></id><property name="name"></property><set name="userSet" table="tt_user_room"><key column="roomId"></key><many-to-many class="com.mr.cheng.associations.User" column="userId"></many-to-many></set></class></hibernate-mapping>

  

转载于:https://www.cnblogs.com/chengAddress/p/4326089.html

hibernate对象管理相关推荐

  1. SSH学习-Hibernate对象生命周期管理

    Hibernate对象就是java中的实体对象,管理就是在实体对象的生命周期内被Hibernate的操作,Hibernate对象的生命周期其实就是实体对象的生命周期(从创建到最后被GC回收),期间对实 ...

  2. Hibernate学习(4)- Hibernate对象的生命周期

    1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联: 2.持久化状态(P ...

  3. 菜鸟学SSH(八)——Hibernate对象的三种状态

    前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对 ...

  4. Hibernate 对象的三种状态

    Hibernate 对象的三种状态 瞬时(transient): 由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的.瞬时(Transient ...

  5. Hibernate对象状态

    Hibernate对象状态 在hibernate中有三种状态:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persisten ...

  6. Hibernate - 对象关系映射文件(*.hbm.xml)详解

    对象关系映射文件,即POJO 类和数据库的映射文件*.hbm.xml(映射文件的扩展名为 .hbm.xml). POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据 ...

  7. Hibernate对象的状态和映射

    一. Hibernate对象的状态 实体对象的三种状态: 1) 暂态(瞬时态)(Transient)---实体在内存中的自由存在,它与数据库的记录无关. po在DB中无记录(无副本),po和sessi ...

  8. Windows内核对象管理

    Windows内核情景分析:所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据:不清楚版本: 对象管理           Windows把一些核心功能作为内核对象来管理,这些 ...

  9. 【Hibernate框架开发之五】Hibernate对象的三种状态Session常用方法

    1. Hibernate对象的三种状态:(图解如下:) 如图所示,Hibernate对象有三种状态,1.Transient  2.Persistent 3.Detached; 三种状态的区别如下: 1 ...

最新文章

  1. dataTable 从服务器获取数据源的两种表现形式
  2. 转:delphi异常捕获try except语句 和 try finally语句用法
  3. python中常用的序列化模块_第六章 常用模块(5):python常用模块(序列化模块:pickle,json,shelve,xml)...
  4. 有三AI知识星球官宣,BAT等大咖等你来撩
  5. python3精要(20)-函数(1)
  6. P2796-Facer的程序【dp】
  7. 米斯特白帽培训讲义(v2)实战篇 迅雷 CMS
  8. python常用算法有哪些_python常见排序算法基础教程
  9. Windows中MySQL主从数据库搭建(二)
  10. IIC加载以及存在的问题---lattice XO3
  11. 认识IT圈的这些人 你的路将走的更顺利
  12. 浅谈企业生产现场消防安全管理策略分析
  13. 缓冲区溢出实例(一)--Windows
  14. logback springBoot 配置日志
  15. 全栈很屌?什么是全栈工程师
  16. 向来有些神秘的ThoughtWorks,突然之间要被Roy卖掉的原因竟然是……
  17. stm32--工程结构的简单理解
  18. iphone好的网站总结
  19. git 清除本地远程被删除的分支
  20. iOS应用程序内存泄露的监测

热门文章

  1. 亚信科技CTO欧阳晔博士:5G网络助推边缘AI|MEET 2022
  2. 网文作者:我太监了;GPT-3:我给你接上
  3. 外部情况错综复杂,联想靠什么过「久日子」
  4. Python学习之面向对象编程
  5. JavaScript 函数的定义
  6. JVM(2)之 JAVA堆
  7. io分析神器blktrace
  8. 如何编写一个全新的 Git 协议
  9. Vector ArrayList Hashtable HashMap ArrayList LinkedList
  10. VS2013的项目转到VS2010需要修改的