hibernate对象管理
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对象管理相关推荐
- SSH学习-Hibernate对象生命周期管理
Hibernate对象就是java中的实体对象,管理就是在实体对象的生命周期内被Hibernate的操作,Hibernate对象的生命周期其实就是实体对象的生命周期(从创建到最后被GC回收),期间对实 ...
- Hibernate学习(4)- Hibernate对象的生命周期
1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联: 2.持久化状态(P ...
- 菜鸟学SSH(八)——Hibernate对象的三种状态
前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对 ...
- Hibernate 对象的三种状态
Hibernate 对象的三种状态 瞬时(transient): 由new操作符创建,且尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的.瞬时(Transient ...
- Hibernate对象状态
Hibernate对象状态 在hibernate中有三种状态:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persisten ...
- Hibernate - 对象关系映射文件(*.hbm.xml)详解
对象关系映射文件,即POJO 类和数据库的映射文件*.hbm.xml(映射文件的扩展名为 .hbm.xml). POJO 类和关系数据库之间的映射可以用一个XML文档来定义. 通过 POJO 类的数据 ...
- Hibernate对象的状态和映射
一. Hibernate对象的状态 实体对象的三种状态: 1) 暂态(瞬时态)(Transient)---实体在内存中的自由存在,它与数据库的记录无关. po在DB中无记录(无副本),po和sessi ...
- Windows内核对象管理
Windows内核情景分析:所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据:不清楚版本: 对象管理 Windows把一些核心功能作为内核对象来管理,这些 ...
- 【Hibernate框架开发之五】Hibernate对象的三种状态Session常用方法
1. Hibernate对象的三种状态:(图解如下:) 如图所示,Hibernate对象有三种状态,1.Transient 2.Persistent 3.Detached; 三种状态的区别如下: 1 ...
最新文章
- dataTable 从服务器获取数据源的两种表现形式
- 转:delphi异常捕获try except语句 和 try finally语句用法
- python中常用的序列化模块_第六章 常用模块(5):python常用模块(序列化模块:pickle,json,shelve,xml)...
- 有三AI知识星球官宣,BAT等大咖等你来撩
- python3精要(20)-函数(1)
- P2796-Facer的程序【dp】
- 米斯特白帽培训讲义(v2)实战篇 迅雷 CMS
- python常用算法有哪些_python常见排序算法基础教程
- Windows中MySQL主从数据库搭建(二)
- IIC加载以及存在的问题---lattice XO3
- 认识IT圈的这些人 你的路将走的更顺利
- 浅谈企业生产现场消防安全管理策略分析
- 缓冲区溢出实例(一)--Windows
- logback springBoot 配置日志
- 全栈很屌?什么是全栈工程师
- 向来有些神秘的ThoughtWorks,突然之间要被Roy卖掉的原因竟然是……
- stm32--工程结构的简单理解
- iphone好的网站总结
- git 清除本地远程被删除的分支
- iOS应用程序内存泄露的监测