hibernate annotation 双向 one-to-one 注解
来源:互联网 发布:三维建筑设计软件 编辑:程序博客网 时间:2024/05/21 11:33
- package com.hibernate.entity;
- import java.io.Serializable;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToOne;
- @Entity
- public class Husband implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 2476364405175138004L;
- private int id;
- private String name;
- private Wife wife;
- @Id
- @GeneratedValue
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- @OneToOne
- public Wife getWife() {
- return wife;
- }
- public void setId(int id) {
- this.id = id;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setWife(Wife wife) {
- this.wife = wife;
- }
- }
- package com.hibernate.entity;
- import java.io.Serializable;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToOne;
- @Entity
- public class Wife implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 5270130768836331730L;
- private int id;
- private String name;
- private Husband husband;
- @Id
- @GeneratedValue
- 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;
- }
- @OneToOne(mappedBy="wife")
- public Husband getHusband() {
- return husband;
- }
- public void setHusband(Husband husband) {
- this.husband = husband;
- }
- }
注意:Wife类的getHusband()上用了mappedBy"wife"
这个意思是说,我这里的OneToOne就不用管了,只用Husband里的getWife()上的OneToOne关系
生成的表为Husband参考Wife,有了wifeid,才能有Husband
Husband为这个关系的拥有者
如果Wife类的getHusband()只有@OneToOne,没有mappedBy,那么生成的两张表都会有对方的外键,造成外键冗余。
Test.java
package com.fancy.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import com.fancy.po.Card;import com.fancy.po.Person;/** * ----------------------------------------- * @文件: Test.java * @作者: fancy * @邮箱: fancyzero@yeah.net * @时间: 2012-6-10 * @描述: 测试类 * ----------------------------------------- */public class Test { public static void main(String[] args) { //读取hibernate配置,默认读取classpath下的hibernate.cfg.xml Configuration conf = new AnnotationConfiguration(); //构建session工厂 SessionFactory sessionFactory = conf.configure().buildSessionFactory(); //打开session Session session = sessionFactory.openSession(); //开始事务 session.beginTransaction(); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * //test1(session); //测试 1 //test2(session); //测试 2 test3(session); //测试 3 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * //提交事务 session.getTransaction().commit(); //关闭session工厂 sessionFactory.close(); //关闭session session.close(); } /** * 数据库初始值: * personName:fancy * cardNumber:440911199008011122 */ //测试方法1 public static void test1(Session session){ Person person = (Person)session.get(Person.class, 1); //发出Person和Card的select语句 Card card = person.getCard(); System.out.println(person.getPersonName()); System.out.println(card.getCardNumber()); person.setPersonName("fancy"); //与初始值一致 card.setCardNumber("440911199008011122");//与初始值一致 session.save(person); //不发出sql语句 //session.save(card); //不发出sql语句 } //测试方法2 public static void test2(Session session){ Person person = (Person)session.get(Person.class, 1); //发出Person和Card的select语句 Card card = person.getCard(); System.out.println(person.getPersonName()); System.out.println(card.getCardNumber()); person.setPersonName("fancyzero"); //与初始值不一致 card.setCardNumber("440911199008011122");//与初始值一致 session.save(person); //发出Person的update语句,数据库中personName被修改,不发出Card的update语句 //session.save(card); //发出Person的update语句,数据库中personName被修改,不发出Card的update语句 } //测试方法3 public static void test3(Session session){ Person person = (Person)session.get(Person.class, 1); //发出Person和Card的select语句 Card card = person.getCard(); System.out.println(person.getPersonName()); System.out.println(card.getCardNumber()); person.setPersonName("fancy"); //与初始值不一致 card.setCardNumber("440911199008080808");//与初始值不一致 session.save(person); //同时发出Person和Card的update语句,数据库中的数据相应被修改 //session.save(card); //同时发出Person和Card的update语句,数据库中的数据相应被修改 }}
- hibernate annotation 双向 one-to-one 注解
- hibernate annotation 双向 one-to-one 注解
- hibernate annotation 双向 one-to-one 注解
- hibernate annotation 双向 one-to-one 注解
- Hibernate之one-to-one双向外键关联Annotation
- hibernate one-to-many many-to-one 双向注解
- hibernate one-to-many many-to-one 双向注解
- hibernate one-to-many many-to-one 双向注解
- hibernate one-to-many many-to-one 双向注解
- hibernate annotation one-to-one
- hibernate annotation one to one 共享主键
- Hibernate – One-To-One Example (Annotation)
- Hibernate – One-to-One example (Annotation)
- Hibernate – One-to-One example (Annotation)
- Hibernate – One-to-One example (Annotation)
- Hibernate – One-to-One example (Annotation)
- hibernate annotation one-to-many
- Hibernate one-to-many many-to-one 双向关联
- android之broadcast发送广播
- HBase数据的导入和导出
- 天涯PHP博客-文章存档
- 以太网MAC地址获得 android
- android4.1触摸屏驱动怎么移植?
- hibernate annotation 双向 one-to-one 注解
- PDA 无线网络设置
- 设计模式解析和实现(C++)之八-Composite模式
- 主题 : iphone和Objective-C笔试题?
- IOS 代码下断点
- flex中ResourceBundle的用法
- 我和她在大一的时光
- 黄龙溪一日游——传智播客成都java培训中心10月15日基础班
- linux下删除文件的空行