在上一次的注解案例里面配置注解的同时,也添加了一对多(@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. SRAM的简单概念

    CY7C138 版权声明:本文为博主原创文章,未经博主允许不得转载.

  2. nyoj 911 Registration system(map)

    Registration system 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 A new e-mail service "Berlandesk&q ...

  3. 【网络流24题】最长k可重区间集问题(费用流)

    [网络流24题]最长k可重区间集问题 [问题分析] 最大权不相交路径问题,可以用最大费用最大流解决. [建模方法] 方法1 按左端点排序所有区间,把每个区间拆分看做两个顶点<i.a>< ...

  4. [K/3Cloud]关于数据库sa密码更改,管理中心登录不上的问题。

    有时候可能应为别的原因可能一不小心更改了数据库的密码,导致K/3 Cloud管理中心和单据打不开. 这个时候其实只要在注册一下就能解决了,在浏览器中输入http://192.168.25.35:800 ...

  5. jquery转义字符之单引号

    jquery动态生成html,并且html中包含方法时,如 var varHtml = '<input type="button" value="点我删除" ...

  6. WeixinJSBridge 微信

    <!DOCTYPE html> <html> <head><title>微信WeixinJSBridge API</title> <m ...

  7. WebDev.WebServer40.EXE

    http://www.cnblogs.com/tong-tong/archive/2013/05/02/3049428.html 大学玩asp.net时就发现VS在Debug时会起一个web服务,这东 ...

  8. ubuntu How do I configure proxies without GUI?

    想法:  我的想法是想是一台国内的 ubuntu 云主机可以通过另外一台在国外(新加坡)的服务器 ,来实现可以访问 google ,哈哈,比较好查资料:) 下面的做法 去修改 /etc/environ ...

  9. JavaSE入门学习10:Java修饰符

    Java语言提供了非常多修饰符,主要分为下面两类: 訪问修饰符 非訪问修饰符 修饰符用来定义类.方法或者变量.通常放在语句的最前端.我们通过以下的样例来说明: <span style=" ...

  10. LeetCode 125. Valid Palindorme (验证回文字符串)

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...