这篇 基于主键的双向一对一关联映射

1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构为:

2.类结构

Person.java

public class Person implements Serializable{
private String id;
private String name;
private IdCard idCard;
public Person() {
}
public Person(String name) {
super();
this.name = name;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IdCard getIdCard() {
return idCard;
}
public void setIdCard(IdCard idCard) {
this.idCard = idCard;
}
}

IdCard.java

public class IdCard implements Serializable{
private String id;
private String address;
private Person person;
public IdCard() {
} public IdCard(String id, String address) {
super();
this.id = id;
this.address = address;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}

3.映射文件

Person.hbm.xml

<hibernate-mapping package="cn.sxt.pojo">
<class name="Person" table="t_person">
<id name="id">
<!-- 表示主键是引用的主表的外键来充当 -->
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<!-- 基于主键的单向关联 constrained表示外键约束 -->
<one-to-one name="idCard" constrained="true"/>
</class>
</hibernate-mapping>

IdCard.hbm.xml

<hibernate-mapping package="cn.sxt.pojo">
<class name="IdCard" table="t_idCard">
<id name="id">
<generator class="assigned"></generator>
</id>
<property name="address"/>
<one-to-one name="person"></one-to-one>
</class>
</hibernate-mapping>

4.测试

public class HibernateTest {
/**
* 生成数据库表的工具方法
* */
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印sql脚本
//第二个参数 是否将脚本导出到数据库中执行
se.create(true, true);
}
/**
* 初始化表数据
*/
@Test
public void testInit(){
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
IdCard card1 = new IdCard("110086", "湖北武当");
IdCard card2 = new IdCard("110087", "光明顶");
Person p1 = new Person("张三疯");
p1.setIdCard(card1);
Person p2 = new Person("殷素素");
p2.setIdCard(card2);
session.save(card1);
session.save(card2);
session.save(p1);
session.save(p2);
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally {
HibernateUtil.close();
}
}
/**
*/
@Test
public void testGetData(){
Session session = HibernateUtil.getSession();
Person p1 = (Person)session.get(Person.class, "110086");
System.out.println(p1.getName()+"----"+p1.getIdCard().getId()+"----"+p1.getIdCard().getAddress());
System.out.println("==================================");
IdCard card =(IdCard)session.get(IdCard.class, "110086");
System.out.println(card.getId()+"----"+card.getAddress()+"----"+card.getPerson().getName());
HibernateUtil.close();
}
}

java之hibernate之基于主键的双向一对一关联映射的更多相关文章

  1. java之hibernate之基于主键的单向一对一关联映射

    这篇讲 基于主键的单向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构应该为: 2.类结构 Person.java public class Person imple ...

  2. java之hibernate之基于外键的双向一对一关联映射

    这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...

  3. Hibernate 基于外键的双向一对一关联映射

    之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...

  4. hibernate 基于主键的单向一对一关联映射

    1.设计表结构 表结构对于基于外键的关联关系来说就少了外键的关联列,并且两张表共用同一个ID,表示一对一. 2.创建Person对象 3.创建IdCard对象 4.写hbm.xml文件 5.生成数据库 ...

  5. Hibernate 基于外键的单项一对一关联映射

    在开发过程中很多时候会用到表与表之间一对一的关联关系,本文简单介绍在Hibernate4中单项一对一的关联映射. 1.设计表结构 2.创建Person对象 3.创建IdCard对象 4.写hbm.xm ...

  6. Hibernate关系映射(二) 基于外键的双向一对一

    基于外键的双向一对一关联映射 需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用. 还是通过刚才用户和地址来演示双向一对一关联. 代码演示 一.实体类 ...

  7. hibernate笔记--基于主键的单(双)向的一对一映射关系

    上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...

  8. Hibernate(12)_基于主键的双向1对1

    一.基于主键的双向1对1 1.介绍: 基于主键的映射策略:指一端的主键生成器使用 foreign 策略,表明根据"对方"的主键来生成自己的主键,自己并不能独立生成主键. <p ...

  9. Hibernate之基于主键映射的一对一关联关系

    1. 基于主键的映射策略:指一端的主键生成器使用foreign策略,表明根据"对方"的主键来生成自己的主键,自己并不能独立生成主键.并用<param> 子元素指定使用当 ...

随机推荐

  1. HTML盒子模型冷知识!!!

    一.边框    1.边框颜色     border-color 边框颜色(可以设置上边框,如:border-top-color,也可以整体设置,但是要注意顺序)     2.边框粗细     bord ...

  2. mysql 修改表名

    //重命名表 rename table table1 to table2; //重命名多个表 rename table table1 to table2,table3 to table4,table5 ...

  3. mysql ,limit 的使用

    //offset参数指定要返回的第一行的偏移量.第一行的偏移量为0,第二行的偏移量为1.count指定要返回的最大行数.LIMIT offset,count; mysql> select * f ...

  4. ICEM-简单拉伸

    原视频下载地址:https://pan.baidu.com/s/1bpjAOv9 ;密码: rnkd

  5. 团队作业-Alpha(4/4)

    队名:软工9组 组长博客:https://www.cnblogs.com/cmlei/ 作业博客:https://edu.cnblogs.com/campus/fzu/SoftwareEngineer ...

  6. 解读 | 你真正理解什么是Cloud Native吗?

    你能做到每周.每天甚至每个钟头向客户发布新特性吗?新加入的开发者能够在他们工作的第一天甚至面试阶段就能部署代码吗?部署新员工的代码后,你能因为确信应用程序运行正常而安然入睡吗?建立快速发布机制,包括支 ...

  7. mysql性能测试-------重要!!!

    我们在做性能测试的目的是什么,就是要测出一个系统的瓶颈在哪里,到底是哪里影响了我们系统的性能,找到问题,然后解决它.当然一个系统由很多东西一起组合到一起,应用程序.数据库.服务器.中中间件等等很多东西 ...

  8. odoo开发笔记 -- 异常处理in resolve_deps field = model

    场景描述: 更新代码,重启服务服务后,odoo后台报错,提示关键字:in resolve_deps field = model._fields[fname]  KeyError: 'entry_id' ...

  9. Java通过行为参数化传递代码

    在软件工程中,一个众所周知的问题就是,不管做什么,用户的需求肯定会变.如何应对这样不断变化的需求?理想的状态下,应该把的工作量降到最少.此外,类似的新功能实现起来还应该很简单,而且易于长期维护.行为参 ...

  10. LODOP很简短的问答(纯文字)

    打印机选择打印机,参考样例5,7http://www.c-lodop.com/LodopDemo.html打印机的一些优先级,参考http://www.c-lodop.com/blogs/Blog00 ...