hibernate基于Annotation的一对一外键映射
来源:互联网 发布:普通话纠正软件 编辑:程序博客网 时间:2024/05/22 15:33
转自http://blog.csdn.net/wangqyoho/article/details/50850105
首先需要弄清楚什么是外键。如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此
可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从
表。外键又称作外关键字。
利用外键建立起来的一对一映射,一对一的连接了两张表,使其具有了唯一的映射关系。这种映射就叫作一对一外键映射。
在hibernate中,可以采用Xml的方式配置,也可以采用annotation的方式配置。由于annotation的配置方式相当简便而且一目了
然,因此直接采用annotation的配置。
Manager.Java:
- package cn.wqy.dao;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.JoinColumn;
- import javax.persistence.OneToOne;
- import javax.persistence.Table;
- @Entity
- @Table(name = "manager_backup")
- public class Manager {
- private int manager_id;
- private String manager_name;
- private String manager_password;
- private Manager_Msg manager_msg;
- @Id
- public int getManager_id() {
- return manager_id;
- }
- @OneToOne
- @JoinColumn(name="man_id")
- public Manager_Msg getManager_msg() {
- return manager_msg;
- }
- public String getManager_name() {
- return manager_name;
- }
- public String getManager_password() {
- return manager_password;
- }
- public void setManager_id(int manager_id) {
- this.manager_id = manager_id;
- }
- public void setManager_msg(Manager_Msg manager_msg) {
- this.manager_msg = manager_msg;
- }
- public void setManager_name(String manager_name) {
- this.manager_name = manager_name;
- }
- public void setManager_password(String manager_password) {
- this.manager_password = manager_password;
- }
- }
Manager_msg.java:
- package cn.wqy.dao;
- import java.util.Date;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.OneToOne;
- import javax.persistence.Table;
- @Entity
- @Table(name = "manager_message")
- public class Manager_Msg {
- private int manager_id;
- private String manager_name;
- private Date manager_birthday;
- private Boolean isMarried;
- // private int man_id;
- public Boolean getIsMarried() {
- return isMarried;
- }
- public Date getManager_birthday() {
- return manager_birthday;
- }
- @Id
- public int getManager_id() {
- return manager_id;
- }
- public String getManager_name() {
- return manager_name;
- }
- public void setIsMarried(Boolean isMarried) {
- this.isMarried = isMarried;
- }
- public void setManager_birthday(Date manager_birthday) {
- this.manager_birthday = manager_birthday;
- }
- public void setManager_id(int manager_id) {
- this.manager_id = manager_id;
- }
- public void setManager_name(String manager_name) {
- this.manager_name = manager_name;
- }
- }
由于要添加映射关系,所以在manager的实体类中添加了manager_msg对象属性及其getter、setter方法。在manager_msg的
getter方法上加上了@oneToOne注解。同时加上了@joinColumn注解,利用其中属性表示了是对其man_id字段添加外键约束,从表中有一名为
man_id的列,默认和主表的主键关联。如果不想关联主键,可以重新指定,设置referencedColumnName的值,指定要关联的列名。
之后在hibernate.cfg.xml中加入类的映射:
- <mapping class="cn.wqy.dao.Manager_Msg"/>
- <mapping class="cn.wqy.dao.Manager" />
以下利用JUnit4进行测试:
- static {
- Configuration conf = new Configuration();
- conf.configure();
- }
- @Test
- public void testManagerSave() {
- Manager m = new Manager();
- Manager_Msg msg = null;
- Session s = HibernateSessionFactory.getSession();
- Transaction tran = s.beginTransaction();
- m = (Manager) s.get(Manager.class, 1);
- msg = m.getManager_msg();
- s.delete(m);*/
- System.out.println(msg);
- System.out.println(m);
- tran.commit();
- s.close();
- }
Ps:在用MyEclipse10(JavaEE5)开发时,导入其自身对Hibernate的支持和junit4之后,会发现报错,这是由于JavaEE5的
@oneToOne缺少一个方法而导致。删除Java EE 5 Libraries,添加JavaEE 6 Libraries。会发现报Error applying BeanValidation
relational constraints,这是因为在J2EE6中javax.persistence.validation.mode默认情况下是auto,如果不设置的话会自动去自己的
classpath下找一个bean-validation的包,找不到,所以会报beanvalidationFactory的错。解决方法是在hibernate.cfg.xml中添加如下
配置:
- <property name="javax.persistence.validation.mode">none</property>
- hibernate基于Annotation的一对一外键映射
- Hibernate学习——(五)基于Annotation的一对一外键映射
- Hibernate ORM映射:基于外键的一对一
- hibernate基于外键的一对一映射--单向和双向
- Hibernate一对一映射(基于外键的映射,基于主键的映射)
- 基于外键映射的 一对一关系
- Hibernate基于主键的一对一映射关系
- Hibernate ORM映射:基于主键的一对一
- Hibernate关联映射 ---一对一案例分析(基于外键)
- Hibernate基于外键一对一映射操作实例
- Hibernate 基于外键一对一映射(单双向)
- hibernate实现一对一关系映射(基于外键)
- hibernate一对一外键映射
- 第十章 基于Annotation的关系映射 一对一
- MyBatis框架基于Annotation注解的一对一关联映射
- Hibernate基于主键和外键的单向一对一的关联映射
- hibernate的一对一映射-外键映射-单向-mysql数据库
- hibernate的一对一映射-外键映射-双向-mysql数据库
- 快速上手Total Commander的经验分享
- uCOSii OSSchedLock()等函数说明
- leetcode89: Gray Code
- 关于推送系统设计的一些总结与思考(三)
- path.json
- hibernate基于Annotation的一对一外键映射
- 模板方式模式
- android ui和聊天界面
- vs2013生成的代码用2010打开的方法
- 11.23位运算1,2
- Android7.0 Vold 进程工作机制分析之整体流程
- 隆重推荐一款latex配套的画图直接生成eps的软件Inkscape
- 数据结构——线性表
- PHP实现假装商品限时抢购繁忙的效果