Hibernate 一对一主键关联实例
来源:互联网 发布:域名管理权如何找回 编辑:程序博客网 时间:2024/06/08 23:58
有两个表,product (id ,name)
image(id,name)
其中image的主键id引用product的主键id,建立约束,形成1对1
下面的代码,将实现如下功能
(1)新建image对象,新建product对象,通过保存product对象,自动对image对象进行保存,并维护完成性约束
CREATE TABLE `product` (
`id` varchar(50) NOT NULL,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
`id` varchar(50) NOT NULL,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) 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;
`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关系
package onetoone;
public class Image ...{
private String id;
private String name;
private Product product;
public Product getProduct() ...{
return product;
}
public void setProduct(Product product) ...{
this.product = product;
}
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 class Image ...{
private String id;
private String name;
private Product product;
public Product getProduct() ...{
return product;
}
public void setProduct(Product product) ...{
this.product = product;
}
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 static void main(String[] args) ...{
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession();
Transaction t=session.beginTransaction();
Image image=new Image();
image.setName("image1");
Product product=new Product();
product.setName("product1");
product.setImage(image);
session.save(product);
t.commit();
System.out.println("success");
}
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession();
Transaction t=session.beginTransaction();
Image image=new Image();
image.setName("image1");
Product product=new Product();
product.setName("product1");
product.setImage(image);
session.save(product);
t.commit();
System.out.println("success");
}
持久类的mapping文件
<?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 - Hibernate Tools
-->
<hibernate-mapping package="onetoone">
<class name="Product" table="product">
<id name="id">
<column name="id"></column>
<generator class="uuid.hex"></generator>
</id>
<property name="name" column="name"></property>
<one-to-one name="image"
class="Image"
cascade="all"
outer-join="true">
</one-to-one>
</class>
</hibernate-mapping>
<?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 - Hibernate Tools
-->
<hibernate-mapping package="onetoone">
<class name="Image" table="image">
<id name="id">
<generator class="foreign">
<param name="property">product</param>
</generator>
</id>
<property name="name" column="name"></property>
<one-to-one name="product"
class="Product"
cascade="all"
outer-join="true">
</one-to-one>
</class>
</hibernate-mapping>
<!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 - Hibernate Tools
-->
<hibernate-mapping package="onetoone">
<class name="Product" table="product">
<id name="id">
<column name="id"></column>
<generator class="uuid.hex"></generator>
</id>
<property name="name" column="name"></property>
<one-to-one name="image"
class="Image"
cascade="all"
outer-join="true">
</one-to-one>
</class>
</hibernate-mapping>
<?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 - Hibernate Tools
-->
<hibernate-mapping package="onetoone">
<class name="Image" table="image">
<id name="id">
<generator class="foreign">
<param name="property">product</param>
</generator>
</id>
<property name="name" column="name"></property>
<one-to-one name="product"
class="Product"
cascade="all"
outer-join="true">
</one-to-one>
</class>
</hibernate-mapping>
测试代码
其中product.setImage(image);
image.setProduct(product); 很关键,如果写product,setImage(image)会报异常
public static void main(String[] args) ...{
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession();
Transaction t=session.beginTransaction();
Image image=new Image();
image.setName("image1");
Product product=new Product();
product.setName("product1");
product.setImage(image);
image.setProduct(product);
session.save(product);
t.commit();
Product product1=(Product)session.get(Product.class, "40288018114a1c4e01114a1c507e0001");
System.out.println(product1);
System.out.println(product1.getImage());
System.out.println("success");
}
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession();
Transaction t=session.beginTransaction();
Image image=new Image();
image.setName("image1");
Product product=new Product();
product.setName("product1");
product.setImage(image);
image.setProduct(product);
session.save(product);
t.commit();
Product product1=(Product)session.get(Product.class, "40288018114a1c4e01114a1c507e0001");
System.out.println(product1);
System.out.println(product1.getImage());
System.out.println("success");
}
- Hibernate 一对一主键关联实例
- 一个Hibernate一对一主键双向关联实例
- Hibernate一对一主键关联
- hibernate一对一主键关联
- Hibernate 一对一主键单向关联
- Hibernate 一对一主键双向关联
- Hibernate一对一关联(共享主键)
- Hibernate 一对一主键单向关联
- Hibernate一对一主键关联映射
- Hibernate 一对一主键双向关联
- hibernate一对一主键关联映射
- Hibernate 一对一主键单向关联
- Hibernate 一对一主键双向关联
- 【Hibernate】--一对一关联、联合主键
- Hibernate一对一主键双向关联
- Hibernate Annotation 一对一主键关联
- hibernate一对一主键双向关联
- hibernate一对一主键双向关联
- 分析现行的常用的文件格式类别
- 提供各种数据库在JDBC中的连接方法.及在struts与hibernate中的配置
- IBM-128
- 研发日志第一篇(调整心态.动手找框架)
- 开源搜索引擎
- Hibernate 一对一主键关联实例
- “衣带渐宽终不悔,为伊消得人憔悴”的赏析
- Log4j基本使用方法
- IT职业规划堪忧
- asp.net的网址重定向方法的比较:面向搜索引擎友好
- JAVA与RFID,技术改变世界
- 大路由器默认密码(完美汇总经典版)
- QQ和键盘的冲突导致蓝屏
- Url rewriter是个好东西,blog也使用了这个东西