Hibernate关系映射之一对一关系
来源:互联网 发布:linux cpu绑核 编辑:程序博客网 时间:2024/05/20 18:54
一对一关系可用共享主键方式、唯一外键方式来实现,而本文使用共享主键方式。
第一步:创建数据库,设置好中文属性,然后创建两个表。
login表:
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int(4)
否
无
主键
USERNAME
登录账号
varchar(20)
是
无
PASSWORD
登录密码
varchar(20)
是
无
detail表:列名
描述
数据类型
可空
默认值
说明
ID
ID号
int(4)
否
无
主键,自增
TRUENAME
真实姓名
varchar(8)
是
无
电子邮件
varchar(50)
是
无
第二步:创建数据库连接驱动,打开MyEclipse DataBase Explorer Perspective视图,new,其中Driver Template=MySQL Connector/J,Driver Name=自定义,Connection URL=jdbc:mysql://localhost:3306/javaee?characterEncoding=gbk,User name=用户名,Password=密码。第三步:创建Web Project,添加Hibernate开发能力(MyEclipse --> Add Hibernate Capabilites),即建立hibernate.cfg.xml文件。
第四步:创建POJO类和其映射文件,可以在打开连接后,对表使用反向工程(Hibernate Reverse Engineering)。
Login.java
package org.model;/** * Login entity. @author MyEclipse Persistence Tools */public class Login implements java.io.Serializable {// Fieldsprivate Integer id;private String username;private String password;private Detail detail; //在Login类中增加Detail的属性并实现其get/set// Constructors/** default constructor */public Login() {}/** full constructor */public Login(String username, String password) {this.username = username;this.password = password;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}public Detail getDetail() {return detail;}public void setDetail(Detail detail) {this.detail = detail;}}映射文件Login.hbm.xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="org.model.Login" table="login" catalog="lab6"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <-- Login的主键生成策略为foreign即通过外键(Detail的主键)生成 --> <generator class="foreign"> <param name="property">detail</param> </generator> </id> <property name="username" type="java.lang.String"> <column name="USERNAME" length="20"> </column> </property> <property name="password" type="java.lang.String"> <column name="PASSWORD" length="20"> </column> </property> <-- 一对一关系的确定,cascade级联属性为all,lazy为false即立即生成 --> <one-to-one name="detail" class="org.model.Detail" cascade="all" lazy="false"></one-to-one> </class></hibernate-mapping>
Detail.java
package org.model;/** * Detail entity. @author MyEclipse Persistence Tools */public class Detail implements java.io.Serializable {// Fieldsprivate Integer id;private String truename;private String email;private Login login; //Detail类中增加Login的属性并实现其get/set// Constructors/** default constructor */public Detail() {}/** minimal constructor */public Detail(Integer id) {this.id = id;}/** full constructor */public Detail(Integer id, String truename, String email) {this.id = id;this.truename = truename;this.email = email;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getTruename() {return this.truename;}public void setTruename(String truename) {this.truename = truename;}public String getEmail() {return this.email;}public void setEmail(String email) {this.email = email;}public Login getLogin() {return login;}public void setLogin(Login login) {this.login = login;}}Detail.hbm.xml
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="org.model.Detail" table="detail" catalog="lab6"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /><-- Detail的主键生成策略identity是数据库生成方式,主键必须设为自增+1 --> </id> <property name="truename" type="java.lang.String"> <column name="TRUENAME" length="8"> </column> </property> <property name="email" type="java.lang.String"> <column name="EMAIL" length="50"> </column> </property> <one-to-one name="login" class="org.model.Login" cascade="all" lazy="false"></one-to-one> </class></hibernate-mapping>
第五步:创建测试类
Test.java
package org;import org.hibernate.Session;import org.hibernate.Transaction;import org.model.Detail;import org.model.Login;import org.util.HibernateSessionFactory;public class Test {public static void main(String args[]) {Session session = HibernateSessionFactory.getSession(); //获得Session对象Transaction ts = session.beginTransaction(); //创建事务对象Detail detail = new Detail();Login login = new Login();login.setUsername("zhangsan");login.setPassword("123321");detail.setTruename("张三");detail.setEmail("zhangsan@163.com");login.setDetail(detail); //detail放入logindetail.setLogin(login); //login放入detailsession.save(detail); //保存detail,通过级联login信息也被保存ts.commit(); //事务提交HibernateSessionFactory.closeSession(); //关闭Session对象}}
0 0
- Hibernate关系映射之一对一关系
- Hibernate表关系映射之一对一映射
- Hibernate关系映射一对一
- hibernate 映射关系 一对一
- hibernate关系映射 一对一
- Hibernate一对一关系映射
- Hibernate一对一关系映射
- hibernate一对一映射关系
- Hibernate关系映射一对一
- Hibernate关联关系映射之一对一
- Hibernate入门之关系篇:一对一映射
- Hibernate进阶之双向一对一关系映射
- hibernate映射关系一对一映射
- Hibernate关联关系映射之一对一关联关系
- Hibernate对象关系映射---一对一
- Hibernate对象关系映射---一对一
- Hibernate 映射一对一关联关系
- 技术点-hibernate关系映射-一对一映射
- QListWidget 显示图片
- Leetcode--Palindrome Partitioning II
- 函数指针
- ORACLE 空值处理
- Dynamic Table View Cell Height and Auto Layout
- Hibernate关系映射之一对一关系
- 如何设置android HttpPost 连接服务器超时
- NYOJ--55--懒省事的小明
- IOS开源库一览表
- Android-关于屏幕适配的一些经验
- 改变计算技术的伟大算法
- 程序员应该知道的一些网站
- 结构体字节对齐
- Linux操作系统版本