Hibernate 一对一主键关联实例

By | 03月13日
Advertisement

有两个表,product (id ,name)
image(id,name)

其中image的主键id引用product的主键id,建立约束,形成1对1

下面的代码,将实现如下功能

(1)新建image对象,新建product对象,通过保存product对象,自动对image对象进行保存,并维护完成性约束

Hibernate 一对一主键关联实例
CREATE TABLE `product` (
Hibernate 一对一主键关联实例
`id` varchar(50) NOT NULL,
Hibernate 一对一主键关联实例
`name` varchar(50) default NULL,
Hibernate 一对一主键关联实例
PRIMARY KEY (`id`)
Hibernate 一对一主键关联实例
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

CREATE TABLE `image` (
`id` varchar(50) NOT NULL,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`),
CONSTRAINT `image_ibfk_1` FOREIGN KEY (`id`) REFERENCES `product` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

Image和Product的持久类,各持有对方的一个对象,形成1对1关系

Hibernate 一对一主键关联实例
package onetoone;
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public class Image ...{
Hibernate 一对一主键关联实例
private String id;
Hibernate 一对一主键关联实例
private String name;
Hibernate 一对一主键关联实例
private Product product;
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public Product getProduct() ...{
Hibernate 一对一主键关联实例
return product;
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public void setProduct(Product product) ...{
Hibernate 一对一主键关联实例
this.product = product;
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public String getId() ...{
Hibernate 一对一主键关联实例
return id;
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public void setId(String id) ...{
Hibernate 一对一主键关联实例
this.id = id;
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public String getName() ...{
Hibernate 一对一主键关联实例
return name;
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public void setName(String name) ...{
Hibernate 一对一主键关联实例
this.name = name;
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例
}
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public static void main(String[] args) ...{
Hibernate 一对一主键关联实例
Configuration cfg=new Configuration();
Hibernate 一对一主键关联实例
cfg.configure();
Hibernate 一对一主键关联实例
SessionFactory sf=cfg.buildSessionFactory();
Hibernate 一对一主键关联实例
Session session=sf.openSession();
Hibernate 一对一主键关联实例
Transaction t=session.beginTransaction();
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Image image=new Image();
Hibernate 一对一主键关联实例
image.setName("image1");
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Product product=new Product();
Hibernate 一对一主键关联实例
product.setName("product1");
Hibernate 一对一主键关联实例
product.setImage(image);
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
session.save(product);
Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
t.commit();
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
System.out.println("success");
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
}

持久类的mapping文件

Hibernate 一对一主键关联实例
<?xml version="1.0" encoding="utf-8"?>
Hibernate 一对一主键关联实例
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
Hibernate 一对一主键关联实例
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
Hibernate 一对一主键关联实例
<!--
Hibernate 一对一主键关联实例
Mapping file autogenerated by MyEclipse - Hibernate Tools
Hibernate 一对一主键关联实例
-->
Hibernate 一对一主键关联实例
<hibernate-mapping package="onetoone">
Hibernate 一对一主键关联实例
<class name="Product" table="product">
Hibernate 一对一主键关联实例
<id name="id">
Hibernate 一对一主键关联实例
<column name="id"></column>
Hibernate 一对一主键关联实例
<generator class="uuid.hex"></generator>
Hibernate 一对一主键关联实例
</id>
Hibernate 一对一主键关联实例
<property name="name" column="name"></property>
Hibernate 一对一主键关联实例
<one-to-one name="image"
Hibernate 一对一主键关联实例
class="Image"
Hibernate 一对一主键关联实例
cascade="all"
Hibernate 一对一主键关联实例
outer-join="true">
Hibernate 一对一主键关联实例
</one-to-one>
Hibernate 一对一主键关联实例
</class>
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
</hibernate-mapping>
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
<?xml version="1.0" encoding="utf-8"?>
Hibernate 一对一主键关联实例
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
Hibernate 一对一主键关联实例
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
Hibernate 一对一主键关联实例
<!--
Hibernate 一对一主键关联实例
Mapping file autogenerated by MyEclipse - Hibernate Tools
Hibernate 一对一主键关联实例
-->
Hibernate 一对一主键关联实例
<hibernate-mapping package="onetoone">
Hibernate 一对一主键关联实例
<class name="Image" table="image">
Hibernate 一对一主键关联实例
<id name="id">
Hibernate 一对一主键关联实例
<generator class="foreign">
Hibernate 一对一主键关联实例
<param name="property">product</param>
Hibernate 一对一主键关联实例
</generator>
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
</id>
Hibernate 一对一主键关联实例
<property name="name" column="name"></property>
Hibernate 一对一主键关联实例
<one-to-one name="product"
Hibernate 一对一主键关联实例
class="Product"
Hibernate 一对一主键关联实例
cascade="all"
Hibernate 一对一主键关联实例
outer-join="true">
Hibernate 一对一主键关联实例
</one-to-one>
Hibernate 一对一主键关联实例
</class>
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
</hibernate-mapping>
Hibernate 一对一主键关联实例

测试代码

其中product.setImage(image);
image.setProduct(product); 很关键,如果写product,setImage(image)会报异常

Hibernate 一对一主键关联实例
Hibernate 一对一主键关联实例
public static void main(String[] args) ...{
Hibernate 一对一主键关联实例
Configuration cfg=new Configuration();
Hibernate 一对一主键关联实例
cfg.configure();
Hibernate 一对一主键关联实例
SessionFactory sf=cfg.buildSessionFactory();
Hibernate 一对一主键关联实例
Session session=sf.openSession();
Hibernate 一对一主键关联实例
Transaction t=session.beginTransaction();
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Image image=new Image();
Hibernate 一对一主键关联实例
image.setName("image1");
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
Product product=new Product();
Hibernate 一对一主键关联实例
product.setName("product1");
Hibernate 一对一主键关联实例
product.setImage(image);
Hibernate 一对一主键关联实例
image.setProduct(product);
Hibernate 一对一主键关联实例
session.save(product);
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
t.commit();
Hibernate 一对一主键关联实例
Product product1=(Product)session.get(Product.class, "40288018114a1c4e01114a1c507e0001");
Hibernate 一对一主键关联实例
System.out.println(product1);
Hibernate 一对一主键关联实例
System.out.println(product1.getImage());
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
System.out.println("success");
Hibernate 一对一主键关联实例

Hibernate 一对一主键关联实例
}

Similar Posts:

  • Hibernate一对一主键关联映射(单向)

    Hibernate一对一主键关联映射(单向关联Person-->IDCard即通过Person可以加载IDCard,反过来则不可以). 映射的数据库表: 原理:让两个实体的主键一样,这样就不需要加入多余的字段了. Person.java: public class Person { private Integer id; private String name; /*定义Person和IDCard的关系(单向一对一)*/ private IDCard idCard; public Integer

  • hibernate一对一主键关联单向(一)

    一对一主键单向引用 User 和car的一对一,car id主键引用user id作为外键.User实体可以访问card实体,但是反之不配置(单向).   CREATE TABLE `card` (   `id` int(11)NOT NULL ,   `info`varchar(255) DEFAULT NULL,   PRIMARY KEY(`id`),   UNIQUE KEY`id` (`id`) USING HASH,   CONSTRAINT`card_ibfk_1` FOREIGN

  • hibernate一对一主键关联映射(单向关联Person-----&gt;IdCard)

    一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段 例子: package com.hibernate; public class IdCard { private int id; private String cardNo; set..get...省 } package com.hibernate; public class Person { private int id; private String name; private IdCard idCard; set..ge

  • hibernate学习笔记第6讲-一对一主键关联映射one-to-one

    Hibernate一对一主键关联: 1,单向主键关联:person-------->idCard Person的主键id作为一个外键参照idCard的主键id.键值都是一样的. 让两个实体的主键id保持相同,这样避免多余字段被创建. Person.hbm.xml: <hibernate-mapping> <class name="com.bjsxt.hibernate.Person" table="t_person"> <id n

  • hibernate 映射&amp;lt;二&amp;gt;一对一主键关联

    一对一主键关联: 就是工资卡IdCare表的id既是主键,也是作为关联Person表的外键(id非自动增长). Person表主键id自动增长. bean关系: 正向工程: 反向工程(通过建立表来生成配置文件): 逆向生成步骤: 最终生成的xml:

  • 8. 一对一主键关联映射

    一对一主键关联映射_单向: * 让两个实体对象的id保持相同,这样可以避免多余的字段被创建 实例背景: 1. 定义IdCard类 package com.bjsxt.hibernate; public class IdCard { private int id; private String cardNo; public int getId() { return id; } public void setId(int id) { this.id = id; } public String get

  • hibernate 一对一外键关联映射_双向

    public class User { private int id; private String username; private IdCard idCard; } public class IdCard { private int id; private String cardNO; private User user; } <class name="IdCard"> <id name="id" > <column name=&

  • 【Hibernate】一对一主键关联映射

    [回顾] 上篇博客内容是对Hibernate实体间多对一关联关系的学习和总结,本篇博客继续关联映射的学习,实体间关系为一对一. [一对一] 1. 原理:让两个实体的主键一样,这样就不需要加入多余的字段了. 2. 示例:在用户Person从表中,存在一个id字段作为主键,而在另一个身份证信息IDCard主表中,同样存在一个id字段是主键,且这两个字段相同.所以用户Person从表与身份证信息IDCard主表之间是存在一对一关系的. 3. 实体类代码: Person实体: package com.b

  • Hibernate关联之 一对一主键单向关联

    Hibernate一对一主键单向关联 1-1的关联可以基于主键关联,但基于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成.另外,另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加constrained="true"属性,表明该类主键由关联类生成. 一.模型介绍 一个人(Person)对应一个地址(Address). 二.实体(省略getter.setter方法) public class Person11pk { private i

  • Hibernate教程06_关系映射之一对一单向主键关联

    本教程每节课都附带源码,强烈大家建议配合源码学习. 本节源码:点击打开链接 一对一单向主键关联(不重要)(使用Annotation无外键关联,使用xml后发现两表使用相同主键) 实现方式有两种: Annotation方式: @primaryKeyJoinColumn 注:此方式有些小Bug,系统不会自动向表里写入外键关联! XML方式: <one-to-one id 使用 foreign class 项目源码: Husband.java package com.bjsxt.hibernate;

Tags: