Hibernate 映射
来源:互联网 发布:实况2017拉什福德数据 编辑:程序博客网 时间:2024/05/16 01:53
Many-to-one 单向
public class Group {
private int id ;
private String name ;
public class User {
private int id ;
private String name ;
private Group group ;
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<many-to-one name="group" column="groupid"></many-to-one>
</class>
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
// many-to-one 在多的一端加了一个外键 所以能取到group
User user = (User) session.load(User.class, 1) ;
System.out.println(user.getName());
System.out.println(user.getGroup().getName());
One-to-one 单向主键
public class IdCard {
private int id ;
private String cardNO ;
public class Person {
private int id ;
private String name ;
private IdCard idCard ;
<class name="IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNO" />
</class>
<class name="Person" table="t_person">
<!-- person 主键来自于外键 idCard属性中的主键 -->
<id name="id">
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name" />
<!-- constrained 表明当前主键存在一个约束
person的主键作为外键参照了idCard
-->
<one-to-one name="idCard" constrained="true"></one-to-one>
</class>
// 可以加载
// 根据外键id 查询另一个表中的数据
Person person = (Person)session.load(Person.class, 1) ;
System.out.println(person.getIdCard().getCardNO());
IdCard idCard = new IdCard() ;
idCard.setCardNO("dddddddddddddddd") ;
Person person = new Person() ;
person.setIdCard(idCard) ;
person.setName("张三丰") ;
// 可以正常保存 一对一映射hibernate已经做了处理 一对一主键关联 默认cascade
session.save(person);
One-to-one 双向主键
public class Husband {
private int id;
private String name;
private Wife wife;
public class Wife {
private int id ;
private String name ;
private Husband husband ;
<class name="Husband" >
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<one-to-one name="wife" ></one-to-one>
</class>
<class name="Wife" >
<id name="id">
<generator class="foreign">
<param name="property">husband</param>
</generator>
</id>
<property name="name" />
<one-to-one name="husband" constrained="true"></one-to-one>
Husband husband = (Husband)session.load(Husband.class, 1) ;
System.out.println(husband.getWife().getName());
One-to-one 外键单向
public class IdCard {
private int id ;
private String cardNO ;
public class Person {
private int id ;
private String name ;
private IdCard idCard ;
<class name="IdCard" table="t_idCard">
<id name="id">
<generator class="native"/>
</id>
<property name="cardNO" />
</class>
<class name="Person" table="t_person">
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<many-to-one name="idCard" unique="true"></many-to-one>
</class>
IdCard idCard = new IdCard() ;
idCard.setCardNO("dddddddddddddddd") ;
Person person = new Person() ;
person.setIdCard(idCard) ;
person.setName("张三丰") ;
session.save(idCard) ;
session.save(person);
one-to-one 双向外键
public class Husband {
private int id;
private String name;
private Wife wife;
public class Wife {
private int id ;
private String name ;
private Husband husband ;
<class name="Wife" >
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<one-to-one name="husband" property-ref="wife"></one-to-one>
</class>
<class name="Husband" >
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<many-to-one name="wife" column="wifeid"></many-to-one>
</class>
Husband husband = (Husband) session.load(Husband.class, 2) ;
System.out.println(husband.getWife().getName());
Wife wife = (Wife) session.load(Wife.class, 2) ;
System.out.println(wife.getHusband().getName());
One-to-many 单向
public class Classes {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
public class Student {
private int id;
private String name;
<class name="Classes" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="students" >
<key column="classesid" ></key>
<one-to-many class="Student" />
</set>
</class>
<class name="Student" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
</class>
Classes classes = (Classes)session.load(Classes.class, 3) ;
System.out.println(classes.getStudents().size());
One-to-many 双向
public class Classes {
private int id;
private String name;
private Set<Student> students = new HashSet<Student>();
public class Student {
private int id;
private String name;
private Classes classes;
<class name="Classes" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="students" inverse="true"cascade="all" >
<key column="classesid"></key>
<one-to-many class="Student" />
</set>
</class>
<class name="Student" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<many-to-one name="classes" column="classesid"/>
<!-- 此处的column必须和Classes中配置的set中的key一致 -->
</class>
Classes classes = new Classes() ;
classes.setName("classes-name") ;
Student s1 = new Student() ;
s1.setName("s1-name") ;
s1.setClasses(classes) ;
Student s2 = new Student() ;
s2.setClasses(classes);
s2.setName("s2-name") ;
classes.getStudents().add(s1) ;
classes.getStudents().add(s2) ;
session.save(classes) ;
// 此处通过配置inverse 属性 和 cascade 属性
// 只保存 classes 控制翻转之后 让studeng自己保存 student发现没有classes
// 于是通过级联 先保存classes 在进行student保存
Many-to-many 单向
public class Role {
private int id;
private String name;
public class User {
private int id;
private String name;
private Set<Role> roles = new HashSet<Role>();
<class name="Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
</class>
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<!-- 配置第三张表的关联id -->
<set name="roles">
<key column="userid" />
<many-to-many column="roleid" class="Role"/>
</set>
</class>
User user = new User() ;
user.setName("user-name") ;
Role role1 = new Role() ;
role1.setName("role1-name") ;
Role role2 = new Role() ;
role2.setName("role2-name") ;
user.getRoles().add(role1) ;
user.getRoles().add(role2) ;
session.save(role1) ;
session.save(role2) ;
session.save(user);
User user = (User) session.load(User.class, 2) ;
System.out.println(user.getRoles().size());
Many-to-many 双向
public class Role {
private int id;
private String name;
private Set<User> users= new HashSet<User>() ;
public class User {
private int id;
private String name;
private Set<Role> roles = new HashSet<Role>();
<class name="Role" table="t_role">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<set name="users" table="t_user_role">
<key column="roleid"></key>
<many-to-many column="userid" class="User"></many-to-many>
</set>
</class>
<class name="User" table="t_user">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<!-- 配置第三张表的关联id -->
<set name="roles" table="t_user_role">
<key column="userid" />
<many-to-many column="roleid" class="Role"/>
</set>
</class>
Role role = (Role) session.load(Role.class, 2) ;
System.out.println(role);
for(User u:role.getUsers())
System.out.println(u.getName());
关于继承:
1】 多个继承类保存在一张表中
public class Animal {
private int id;
private String name;
private boolean sex;
public class Bird extends Animal {
private int height;
public class Pig extends Animal {
private int weight;
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native">
</generator>
</id>
<!-- 在数据库里面加一个字段 区分不同的类 -->
<discriminator column="type" type="string"/>
<property name="name" />
<property name="sex" />
<subclass name="Pig" discriminator-value="P">
<property name="weight" />
</subclass>
<subclass name="Bird" discriminator-value="B">
<property name="height" />
</subclass>
</class>
2】 每个继承类分别保存 在不同的表中,其中父表保存公共属性,子表分别保存其特有属性
public class Animal {
private int id;
private String name;
private boolean sex;
public class Bird extends Animal {
private int height;
public class Pig extends Animal {
private int weight;
<class name="Animal">
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<property name="sex" />
<joined-subclass name="Pig">
<key column="pigid" />
<property name="weight" />
</joined-subclass>
<joined-subclass name="Bird">
<key column="birdid" />
<property name="height" />
</joined-subclass>
</class>
Bird bird = (Bird) session.load(Bird.class,3) ;
System.out.println(bird.getName());
3】 父类不形成表,每个子类分别保存在不同的表中
public abstract class Animal {
private int id;
private String name;
private boolean sex;
public class Bird extends Animal {
private int height;
public class Pig extends Animal {
private int weight;
<class name="Animal" abstract="true">
<id name="id">
<generator class="assigned">
</generator>
</id>
<property name="name" />
<property name="sex" />
<union-subclass name="Pig">
<property name="weight" />
</union-subclass>
<union-subclass name="Bird">
<property name="height" />
</union-subclass>
</class>
Pig pig = new Pig() ;
pig.setName("pig-name") ;
pig.setSex(false) ;
pig.setWeight(100) ;
pig.setId(1) ;
session.save(pig) ;
Bird bird = new Bird() ;
bird.setHeight(10) ;
bird.setName("bird-name") ;
bird.setSex(true) ;
bird.setId(2) ;
session.save(bird);
组件映射
public class User {
private int id;
private String name;
private Contact contact;
public class Contact {
private String zipCode;
private String address;
private String contactTel;
private String phoneNumber;
<class name="User" table="t_user">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<component name="contact">
<property name="zipCode" />
<property name="address" />
<property name="contactTel" />
<property name="phoneNumber" />
</component>
</class>
复合主键映射
public class StudentPK implements Serializable{
private String college;
private String studentID;
// 需要重写hashcode 方法 和 equals方法
public class Student {
private String name;
private String sex;
private int age;
private StudentPK pk;
<class name="Student" >
<composite-id name="pk">
<key-property name="college" />
<key-property name="studentID" />
</composite-id>
<property name="name" />
<property name="sex" />
<property name="age" />
</class>
User user = new User() ;
Contact contact = new Contact();
contact.setAddress("XXXXXXXXXXX") ;
contact.setContactTel("123311111111111") ;
contact.setPhoneNumber("121111111111111") ;
contact.setZipCode("123131") ;
user.setName("shanyuxiyun") ;
user.setContact(contact) ;
session.save(user);
其他集合映射
public class CollectionMapping {
private int id;
private String name;
private List<String>list = new ArrayList<String>();
private String[] array = new String[10];
private Map<String,String> map = new HashMap<String, String>();
private Set<String> set = new HashSet<String>();
<class name="CollectionMapping">
<id name="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<list name="list">
<key column="list_id" />
<list-index column="list_index" />
<element column="list_value" type="string" />
</list>
<array name="array">
<key column="array_id"/>
<list-index column="array_index"/>
<element column="array_value" type="string"/>
</array>
<map name="map">
<key column="map_id"/>
<map-key column="map_key" type="string"/>
<element column="map_value" type="string"/>
</map>
<set name="set">
<key column="set_id"/>
<element column="set_value" type="string"/>
</set>
</class>
CollectionMapping cm = new CollectionMapping();
cm.setArray(new String[] { "aa", "bb", "cc" });
Set<String> set = new HashSet<String>();
set.add("set1");
set.add("set2");
set.add("set3");
cm.setSet(set);
Map<String, String> map = new HashMap<String, String>();
map.put("k1", "v1");
map.put("k2", "v2");
map.put("k3", "v3");
cm.setMap(map);
List<String> list = new ArrayList<String>();
list.add("list1");
list.add("list2");
list.add("list3");
cm.setList(list);
cm.setName("name");
session.save(cm);
悲观锁
<class name="Inventory" >
<id name="itemNO">
<generator class="native"/>
</id>
<property name="name" />
<property name="quatity"/>
</class>
Inventory inventory = (Inventory) session.load(Inventory.class, 1, LockMode.UPGRADE) ;
System.out.println(inventory.getQuatity());
inventory.setQuatity(inventory.getQuatity()-200) ;
session.flush() ;
乐观锁
public class Inventory {
private int itemNO;
private String name;
private int quatity;
private int version;
<class name="Inventory" optimistic-lock="version">
<id name="itemNO">
<generator class="native"/>
</id>
<property name="version" />
<property name="name" />
<property name="quatity"/>
</class>
Inventory inventory = (Inventory)session.load(Inventory.class, 1) ;
System.out.println(inventory.getQuatity());
inventory.setQuatity(inventory.getQuatity()-200) ;
session.flush() ;
- hibernate映射
- hibernate映射
- hibernate映射
- hibernate映射
- Hibernate 映射
- hibernate映射
- hibernate映射
- Hibernate------映射
- Hibernate映射
- hibernate映射
- hibernate 映射
- hibernate映射
- Hibernate映射
- hibernate映射
- Hibernate映射
- hibernate映射
- hibernate映射
- HIbernate映射
- Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决)
- 熟悉学习shell编程
- 写文章的几大技巧
- 网站无法访问http错误种类及原因
- sharepoint 中添加计时器作业TimerJob
- Hibernate 映射
- C++ 虚函数的作用
- 【转帖】源的添加管理和Cydia使用教程
- 关于旁路电容和耦合电容精讲
- 面向对象常见的4种开发方法
- oracle ebs 应用笔记
- omap3530上移植AMT 6000 系列USB型触摸屏+tslib
- 密码复杂度检查的正则表达式
- TCP状态转换