hibernate 之 9.one2one双向
来源:互联网 发布:中科院心理研究所知乎 编辑:程序博客网 时间:2024/06/05 08:17
在培训系统中,我们经常会为每一个学员,分配一个所属登录帐号,对应的表结构设计如下:
图1:培训系统表结构
t_student:
学员信息表,存储学员的基本信息,如:姓名、年龄、身份证号、地址等等
t_user:
用户表,储系统用户信息,如:登录帐号、密码等
从图1中,知道 它通过student_id来关联 t_studnet
面向对象类关系
CRUD:
配置:
User类
package com.demo.model;/**用户信息 * @author wobendiankun *2014-10-29 下午11:05:26 */public class User {/** *用户Id */private int userId;/** * 用户名 */private String userName;/** * 密码 */private String password;private Student student ;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Student getStudent() {return student;}public void setStudent(Student student) {this.student = student;}}
Student类package com.demo.model;import java.io.UnsupportedEncodingException;import java.util.Set;/**学生信息 * @author wobendiankun *2014-10-19 下午08:54:29 */public class Student {private int studentId ;private String studentName ;private int age;private Set<Certificate> certificates ;private User user;public int getStudentId() {return studentId;}public void setStudentId(int studentId) {this.studentId = studentId;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {String str="";if(studentName!=null){try {str=new String(studentName.getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return "Student [studentId=" + studentId + ", studentName="+ str + ", age=" + age + "]";}public Set<Certificate> getCertificates() {return certificates;}public void setCertificates(Set<Certificate> certificates) {this.certificates = certificates;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}
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.demo.model.User" table="t_user"><id name="userId" column="user_id"><generator class="sequence"><param name="sequence">SEQ_T_USER</param></generator></id><property name="userName" column="user_name" /><property name="password" /><many-to-one name="student" column="student_id" unique="true"></many-to-one></class></hibernate-mapping>
<many-to-one name="student" column="student_id" unique="true"> ,通过 unique="true" 来说明1对1关系,并由这方来维护关联字段
Student.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.demo.model.Student" table="t_student"><id name="studentId" column="student_id"><generator class="sequence"><param name="sequence">SEQ_T_STUDENT</param></generator></id><property name="studentName" column="student_name" /><property name="age" /><set name="certificates" lazy="extra" inverse="true"><key column="student_id"></key><one-to-many class="com.demo.model.Certificate"/></set><one-to-one name="user" property-ref="student"></one-to-one></class></hibernate-mapping>
<one-to-one name="user" property-ref="student"></one-to-one> ,
name为Student类的成员变量user,
property-ref为User类的成员变量student
add:
@Testpublic void addTest(){Student student=new Student();student.setStudentName("大宝");student.setAge(45);User user=new User();user.setUserName("db");user.setPassword("111111");//设置双向关系user.setStudent(student);student.setUser(user);Session session = null;try {session = HibernateUtil.openSession();session.beginTransaction();session.save(student);session.save(user);session.getTransaction().commit();} catch (Exception e) {session.getTransaction().rollback();e.printStackTrace();} finally {HibernateUtil.closeSession(session);}}发出的sql:
Hibernate: insert into t_student (student_name, age, student_id) values (?, ?, ?)Hibernate: insert into t_user (user_name, password, student_id, user_id) values (?, ?, ?, ?)
update@Testpublic void updateTest(){User user=new User();user.setUserId(21);user.setUserName("dddd");Student student=new Student();student.setStudentId(102);student.setStudentName("二宝");//设置关联关系student.setUser(user);Session session = null;try {session = HibernateUtil.openSession();session.beginTransaction();session.update(student);session.getTransaction().commit();} catch (Exception e) {session.getTransaction().rollback();e.printStackTrace();} finally {HibernateUtil.closeSession(session);}}
发出的sqlHibernate: update t_student set student_name=?, age=? where student_id=?
Student这方不负责维护关联字段,不会发送更新User 的语句
1 0
- hibernate 之 9.one2one双向
- Hibernate one2one 双向主键关联
- Hibernate one2one 外键双向关联
- hibernate之 8.one2one单向
- Hibernate之one2one主键关联
- Hibernate中的one2one的单双向关系映射
- hibernate映射One2One
- Hibernate关联关系-one2one
- Hibernate中的one2one映射实例二(一对一主键关联映射双向)
- Hibernate one2one 主键单向关联
- hibernate one2one xml及annotation
- Hibernate基础------》映射关系---》one2one
- Hibernate基础------》单向映射--->one2one
- one2one
- hibernate 笔记(一)----one2one主外键关联映射
- Hibernate 的关系映射4 One2One
- Hibernate one2one 外键单向关联
- Hibernate 映射关系 ---One2One 主键关联
- GPU并行编程方法
- pthread_join()
- android开发之异常java.lang.IllegalStateException: Adapter is detached.的解决办法
- Linux下记录所有用户操作的脚本
- Linux 动态库的显示调用
- hibernate 之 9.one2one双向
- 单点登录SSO的实现原理
- 常见android编译错误解决
- 关于Android通知栏的兼容问题
- Android控件之HorizontalScrollView 去掉滚动条
- ubuntu 显示或者隐藏 grub选择菜单
- android应用程序签名详解
- 局部代码块——构造代码块——静态代码块 (In Java)
- poj-3692(最大完全子图)