在上一次的注解案例里面配置注解的同时,也添加了一对多(@OneToMany)的关系在里面。

本次将补充上次的缺失:其他三种关联方式的配置。

为了简化配置的复杂度   在此案例中Emp和Dept并不是唯一的两个类,其他的我都会在适当的时机点明。

例如配置一对一关联的时候再来使用这两个类就不太合适了  。

@OneToOne的配置    参与的类有Student和Card(学生与身份证是一对一的关系)

  Student

 package cn.happy.entity;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="Card")
public class IdCard {
@Id
@Column(length=18)
private String cid;
@Column(name="cname")
private String cname;
@OneToOne(mappedBy="craid")
private Student stu;
}

  Card

 package cn.happy.entity;

 import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table; import org.hibernate.annotations.CollectionId;
@Entity
@Table(name="Student")
public class Student {
@Id
@GeneratedValue
private Integer id;
@Column(name="name")
private String name;
@OneToOne(cascade={CascadeType.ALL})
@JoinColumn(name="cid")
private Card card; }

@ManyToOne的配置   Emp和Dept(符合多对一的关系)

  Emp

 @Entity
@Table (name="EMP")
  //注解的命名查询
@NamedQuery(name="selectEmp",query="from Emp e where e.empId>:eno")
public class Emp {
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
@SequenceGenerator(name="seq_gen",sequenceName="SEQ_Num",allocationSize=1,initialValue=4)
@Column (name="EMPNO")
private Integer empId;
@Column (name="ENAME")
private String empName;
@Column
private String job;
@Column
private String mgr;
@Column
private Date hiredate;
@Column
private Integer sal;
@Column
private Integer comm;
@OneToMany(mappedBy=“emp”) private Dept dept;
}

  Dept

 /**
* 注解1.1
*/
@Entity
@Table(name="DEPT")
public class Dept { /*@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
@SequenceGenerator(name="seq_gen",sequenceName="HIBERNATE_SEQUENCE",allocationSize=1,initialValue=4)*/ @Id
//主键生成策略
@GeneratedValue(generator="my_gen")
//自定义主键生成方式:uuid
@GenericGenerator(name="my_gen",strategy="uuid")
private Integer deptNo; @Column(name="DNAME")
private String deptName; @Column(name="LOC")
private String loc; @ManyToOne(fetch=FetchType.LAZY)
     @JoinColumn(name="DEPTNO")
private Set<Emp> emps = new HashSet<Emp>();

@ManyToMany的配置   Emp和Project(符合多对多的关系)

  Project

 /**
* 注解1.1
*/
@Entity
@Table(name="AnProject")
public class Project {
@Id
@GeneratedValue
private Integer pid;
private String pname; @ManyToMany(mappedBy="pros")
private Set<Emp> emp = new HashSet<Emp>();
}

  Emp

 /**
* 注解1.2
*/
@Entity
@Table(name="AnEmp")
public class Emp {
@Id
@GeneratedValue
private Integer empId; private String empName; @ManyToMany(cascade=CascadeType.ALL)
//指定两表相关联的中间表 只有两列(eid,pid)
@JoinTable(
name="AnnoEmpPro",
joinColumns=@JoinColumn(name="eid"),
inverseJoinColumns=@JoinColumn(name="pid")
)
private Set<Project> pros = new HashSet<Project>();
}

  测试  多对多

     @Test
public void Test1(){
Session session = HibernateUtils.currentSession();
Transaction tx = session.beginTransaction();
//创建两个员工对象
Emp emp1 = new Emp("zym1");
Emp emp2 = new Emp("zym2"); //创建两个项目对象
Project pro1 = new Project("项目1");
Project pro2 = new Project("项目2");
//1号员工分别参加了 项目1 和项目2
emp1.getPros().add(pro1);
emp1.getPros().add(pro2); //2号员工只参与了项目2
emp2.getPros().add(pro2);
session.save(emp1);
session.save(emp2); tx.commit();
HibernateUtils.closeSession();
}

可以看到 :  分别给emp表添加了2条数据、给project表添加了2条数据、给emppro中间表添加了4条记录

在上面的双向多对多的配置中,我们选择了Emp作为了主表,所以在Emp中设置了cascade级联关系,并设置了两表之间相关联的第三表的表名及列名。

注解的配置及测试信息留笔以待后续关注。

Java_注解之二的更多相关文章

  1. Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils

    Spring 注解(二)注解工具类 AnnotationUtils 和 AnnotatedElementUtils Spring 系列目录(https://www.cnblogs.com/binary ...

  2. Spring 注解(二)注解工具类

    本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapp ...

  3. MVC-Model数据注解(二)-自定义

    由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解.         自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...

  4. Java_注解_01_注解(Annotation)详解

    一.注解的概念 Annotation(注解)是插入代码中的元数据(元数据从metadata一词译来,就是“描述数据的数据”的意思),在JDK5.0及以后版本引入.它可以在编译期使用预编译工具进行处理, ...

  5. Java_注解_异常_01_ElementType cannot be resolved to a variable

    一.异常现象: 自定义注解时, @Retention和@Target都能导入进来,但是却报下列错误: RetentionPolicy cannot be resolved to a variable ...

  6. SpringMVC注解汇总(二)-请求映射规则

    接上一节SpringMVC注解汇总-定义 讲到Httpy请求信息 URL路径映射 1)普通URL路径映射 @RequestMapping(value={"/test1", &quo ...

  7. java注解之二

    从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...

  8. Java注解(二):实战 - 直接使用对象列表生成报表

    通过对Java注解(一):介绍,思想及优点学习了解,相信大家对Java注解有一定程度的了解,本篇文章将实战项目中的应用来加深对Java注解的了解. 本实例实现根据指定字段的JavaBean,生成对应列 ...

  9. java_注解

    注解1    注解的概念    jdk自带的注解    声明与使用注解的基本语法        注解的概念        在javaEE与开源框架中广泛使用,泛型在集合框架中广泛使用        注 ...

随机推荐

  1. java使用JNA框架调用dll动态库

    这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...

  2. linux下git+github个人使用记录

    Linux: 安装git的命令: sudo apt install git 查看版本确认安装成功: git --version 生成密钥: ssh-keygen -t rsa -C "you ...

  3. 工资(money)

    (money/money.in/money.out) 时限1000ms 内存256MB 聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi.有m个结算工钱的时间,聪哥可以自由 ...

  4. 常见的HTTP状态码(HTTP Status Code)

    HTTP状态码 当使用浏览器访问一个网页时,浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览 ...

  5. jq仿ps颜色拾取功能-js颜色拾取

    1.效果展示 2.html代码:index.html <!DOCTYPE html> <html lang="en"> <head> <m ...

  6. Hibernate插入错误:GenericJDBCException: could not insert:

    数据库中一般不能建立user(表名为User)表,将User类改名,又一次建立映射,问题就能够解决 当然,还有还有一种情况.就是类中id类型错误.要设置为Integer型才干够设置自己主动增长,否则也 ...

  7. centos命令行安装mysql随机密码查看方法(遇到问题及其解决办法)

    mysql初次命令行安装登录时报错: 未输入密码:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwo ...

  8. Android---58---初学GPS定位

    GPS英文是Global Positioning System 全球定位系统的简称. Android为GPS功能支持专门提供了一个LocationManager,位置管理器.全部GPS定位相关的服务. ...

  9. hdu 2094 产生冠军(拓扑排序)

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  10. 在oracle中操作表及字段注释,查询一个表的所有字段名以及属性和约束

    1.查询表注释 SELECT * FROM USER_TAB_COMMENTS; 三列:TABLE_NAME,TABLE_TYPE,COMMENTS 2.查询字段注释 SELECT * FROM US ...