zoukankan      html  css  js  c++  java
  • 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这个注解使用在拥有外键的表的一方,就是从表的一方。

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

  • 相关阅读:
    jquery冲突细节
    最懂中文的H5前端框架amazeUI
    IT Girl
    json_encode注意
    YII2 Activedataprovider 类分页的使用
    Yii框架,在页面输出执行sql语句,方便调试
    yii2的GridView和ActiveDataProvider具体使用
    文件压缩工具类
    将dubbo中使用的动态代理作为工具类
    spring中使用动态代理(AOP)
  • 原文地址:https://www.cnblogs.com/anzmri/p/8194089.html
Copyright © 2011-2022 走看看