Hibernate关于一对一注解配置

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

Dept实体类配置

 1 package cn.xsy.entity.day_onetoone;
 2 
 3 import javax.persistence.*;
 4 
 5 /**
 6  * Created by Administrator on 2017/12/28.
 7  */
 8 @Entity
 9 @Table(name = "Dept")
10 public class Dept
11 {
12     @Id
13     @GeneratedValue
14     private Integer deptno;
15     private String deptname;
16 
17     @OneToOne(mappedBy = "dept",cascade = CascadeType.ALL)
18 
19     private Emp emp;
20 
21     public Emp getEmp() {
22         return emp;
23     }
24 
25     public void setEmp(Emp emp) {
26         this.emp = emp;
27     }
28 
29     public Integer getDeptno() {
30         return deptno;
31     }
32 
33     public void setDeptno(Integer deptno) {
34         this.deptno = deptno;
35     }
36 
37     public String getDeptname() {
38         return deptname;
39     }
40 
41     public void setDeptname(String deptname) {
42         this.deptname = deptname;
43     }
44 
45 
46 }

Emp实体类配置

 1 package cn.xsy.entity.day_onetoone;
 2 
 3 import javax.persistence.*;
 4 
 5 /**
 6  * Created by Administrator on 2017/12/28.
 7  */
 8 @Entity
 9 @Table(name = "Emp")
10 public class Emp {
11 
12     @Id
13     @GeneratedValue
14     private Integer empno;
15     private String empname;
16 
17     @OneToOne
18     @JoinColumn(name = "DE")
19 
20     private Dept dept;
21 
22     public Dept getDept() {
23         return dept;
24     }
25 
26     public void setDept(Dept dept) {
27         this.dept = dept;
28     }
29 
30     public Integer getEmpno() {
31         return empno;
32     }
33 
34     public void setEmpno(Integer empno) {
35         this.empno = empno;
36     }
37 
38     public String getEmpname() {
39         return empname;
40     }
41 
42     public void setEmpname(String empname) {
43         this.empname = empname;
44     }
45 
46 
47 }

hibernate.cfgonetooneexplanatory.xml文件配置(需要指定标识实体类)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5 
 6 <hibernate-configuration>
 7    <!--创建Session的基础配置-->
 8     <session-factory>
 9         <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
10         <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
11         <property name="connection.username">waxsy</property>
12         <property name="connection.password">bsfm</property>
13 
14         <!-- JDBC 连接池(use the built-in) -->
15    <!--     <property name="connection.pool_size">1</property>-->
16 
17         <!-- SQL dialect (方言)-->
18         <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
19 
20         <!-- Enable Hibernate's automatic session context management
21           session工厂创建的session和当前线程绑定bind
22          -->
23         <property name="current_session_context_class">thread</property>
24 
25         <!-- Disable the second-level cache  启用/关闭二级缓存-->
26        <!-- <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>-->
27 
28         <!-- Echo   all executed SQL to stdout 在控制台打印sql -->
29         <property name="show_sql">true</property>
30         <!--格式化SQL-->
31         <property name="format_sql">true</property>
32         <!-- Drop and re-create (重新创建)the database schema(架构) on startup (启动)
33          是否根据hbm.xml自动建表 建表的策略 update create
34          hbm配置文件》》》》》》》ddl  数据表
35          create: 过程:先drop 再Create
36          update:检查现有表的架构是否存在,真实开发中,在上线后,一定update
37         -->
38         <property name="hbm2ddl.auto">update</property>
39          <!--关联小配置 -->
40 
41         <mapping class="cn.xsy.entity.day_onetoone.Dept"></mapping>
42         <mapping class="cn.xsy.entity.day_onetoone.Emp"></mapping>
43 
44     </session-factory>
45 
46 </hibernate-configuration
47 >

编写测试类

 1 package day01;
 2 
 3 
 4 
 5 
 6 import cn.xsy.entity.day_onetoone.Dept;
 7 import cn.xsy.entity.day_onetoone.Emp;
 8 import cn.xsy.util.HibernateUtil;
 9 import org.hibernate.Query;
10 import org.hibernate.Session;
11 import org.hibernate.Transaction;
12 import org.junit.Test;
13 
14 /**
15  * Created by Happy on 2017-12-24.
16  */
17 public class Test20171230_onetoone {
18 
19     //一对一关联
20     @Test
21     public void explanatory(){
22         Session session= HibernateUtil.getSession();
23         Transaction tx=session.beginTransaction();
24         Dept dept=new Dept();
25         dept.setDeptname("开发部");
26         dept.setDeptno(19);
27         Emp emp=new Emp();
28         emp.setEmpno(3);
29         emp.setEmpname("天赐");
30         dept.setEmp(emp);
31         emp.setDept(dept);
32         session.save(dept);
33         tx.commit();
34         System.out.println("111111111111");
35 
36     }
37 
38 }

效果

Dept中的mappedBy

首先,mappedBy这个注解只能够用在@OntToOne,@OneToMany,@manyToMany中,不能够用在@manyToOne中;

第二,这个注解看网上的意思可以简单地理解为:这个注解用在主表的一方,就是被引用的一方;

第三,这个注解是与@JoinColumn这个注解是互斥的,因为@JoinColumn这个注解使用在拥有外键的表的一方,就是从表的一方。

第四,这个注解的属性值是:指向另外一个类中定义的一个属性,这个属性的类型是当前这个类;有点绕,有点晕,是的;就是说它的属性值指向的是:与之关联类中定义的指向本类的一个属性!

原文地址:https://www.cnblogs.com/anzmri/p/8194089.html