Hibernate一一映射
来源:互联网 发布:知乎赚钱 编辑:程序博客网 时间:2024/04/30 07:48
最近在使用hibernate时,需要用到一一映射的关系,因此整理出两种不同的关联形式,记载下来以便自己记忆和其他朋友参考:
1)主键双向关联:
Person实体:
public class Person implements java.io.Serializable {// Fields/** * */private static final long serialVersionUID = 1L;private Integer id;private String name;private Location location;// Constructors/** default constructor */public Person() {}/** full constructor */public Person(String name) {this.name = name;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Location getLocation() {return location;}public void setLocation(Location location) {this.location = location;}}
<?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"><hibernate-mapping> <class name="com.entity.Person" table="Person" > <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <one-to-one name="location"></one-to-one> <property name="name" type="java.lang.String"> <column name="name" length="50" not-null="true" /> </property> </class></hibernate-mapping>
Location实体:
public class Location implements java.io.Serializable {// Fields/** * */private static final long serialVersionUID = 1L;private Integer id;private String address;private Person person;// Constructors/** default constructor */public Location() {}/** full constructor */public Location(String address) {this.address = address;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getAddress() {return this.address;}public void setAddress(String address) {this.address = address;}public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}}
Location.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"><hibernate-mapping> <class name="com.entity.Location" table="Location" > <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="foreign" > <param name="property">person</param> </generator> </id> <one-to-one name="person" constrained="true"></one-to-one> <property name="address" type="java.lang.String"> <column name="address" length="50" not-null="true" /> </property> </class></hibernate-mapping>
public class PrimaryKeyOne2One {Session session;@Beforepublic void prepare(){session=HibernateSessionFactory.getSession();}@Testpublic void insert(){Transaction transaction = null;try {transaction=session.beginTransaction();Person person = new Person();person.setName("帕蒂唐");Location location = new Location();location.setAddress("广东省");location.setPerson(person);//session.save(person);session.save(location);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptionif(transaction!=null)transaction.rollback();}}@Testpublic void proceed(){Person person=(Person)session.get(Person.class, 2);System.out.println(person.getLocation().getAddress());}@Afterpublic void exit(){HibernateSessionFactory.closeSession();}}
2)外键关联
User实体:
public class User implements java.io.Serializable {// Fields/** * */private static final long serialVersionUID = 1L;private Integer id;private String name;private Account account;public User(){}public User(Integer id){this.id = id;}public User(String name,Account account){this.name=name;this.account=account;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Account getAccount() {return account;}public void setAccount(Account account) {this.account = account;}}
User.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"><hibernate-mapping> <class name="com.entity.User" table="t_user" > <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="50" not-null="true" /> </property> <many-to-one name="account" class="com.entity.Account" unique="true" cascade="all" column="account"></many-to-one> </class></hibernate-mapping>
public class Account implements java.io.Serializable {// Fields/** * */private static final long serialVersionUID = 1L;private Integer id;private Integer money;// Constructors/** default constructor */public Account() {}/** full constructor */public Account(Integer money) {this.money = money;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public Integer getMoney() {return this.money;}public void setMoney(Integer money) {this.money = money;}}
Account.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"><hibernate-mapping> <class name="com.entity.Account" table="Account" > <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <property name="money" type="java.lang.Integer"> <column name="money" not-null="true" /> </property> <!-- <one-to-one name="user" class="com.entity.User" cascade="all" constrained="true"></one-to-one> --> </class></hibernate-mapping>
测试代码:
public class One2OneRelationTest {Session session;@Beforepublic void prepare(){session=HibernateSessionFactory.getSession();}@Testpublic void insert(){Transaction transaction = null;try {transaction=session.beginTransaction();Account account = new Account();account.setMoney(10000);User usr = new User();usr.setName("paditang");usr.setAccount(account);session.save(usr);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptionif(transaction!=null)transaction.rollback();}}/*@Testpublic void Select(){User user = (User)session.get(User.class, 3);String name = user.getName();System.out.println(name);Account account = user.getAccount();System.out.println(account.getMoney());}*//*@Testpublic void delete(){Transaction transaction = null;try {transaction=session.beginTransaction();session.delete(new User(1));transaction.commit();} catch (HibernateException e) {// TODO: handle exceptionif(transaction!=null)transaction.rollback();}}*/@Afterpublic void exit(){HibernateSessionFactory.closeSession();}}
3)外键双向关联
只需要注意在主键那一方,在<one-to-one >下 设置property-ref属性。
0 0
- Hibernate一一映射
- 一一映射
- hibernate:映射文件的属性名必须和pojo类的属性名以及数据库字段名一一对应
- 一一
- hibernate映射
- hibernate映射
- hibernate映射
- hibernate映射
- Hibernate 映射
- hibernate映射
- hibernate映射
- Hibernate------映射
- Hibernate映射
- hibernate映射
- hibernate 映射
- hibernate映射
- Hibernate映射
- hibernate映射
- alert 和 console.log的区别
- BIOS工作原理
- 我的服务器开发之路-安装thinkphp
- oracle面试题
- chapter 6 exercise 13
- Hibernate一一映射
- 位运算
- 应用开机自启动&首启动&是否安装&应用信息界面&启动程序&桌面选择器
- [深度学习论文笔记][Video Classification] Large-scale Video Classification with Convolutional Neural Networks
- Android 打造形形色色的进度条 实现可以如此简单
- ICA
- python学习日志3
- 电信手机数据连接的那些问题
- 【matlab】从图片中截取矩形区域(手工选取/标记在原图上/截取矩形区域并保存)