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

接下来讲解多对多双向注解:

我以用户和房子作为示例讲解。

第一步:准备实体类

House(房间表)

package cn.manytomany.entity;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set; /**
* Created by accp on 2017/2/10.
*/
@Entity
@Table(name = "House")
public class House {
@Id
@GeneratedValue
private Integer id;
@Column
private String title;
@Column
private String description;
@Column
private Integer price;
@Column
private String pubdate;
@Column
private Integer floorage;
@Column
private String contact;
@Column
private Integer userid;
@Column
private Integer streetid;
@Column
private Integer typeid; /**
* 将控制权交给主表
*/
@ManyToMany(mappedBy = "houses")
private Set<Users> userss=new HashSet<Users>(); public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public Integer getPrice() {
return price;
} public void setPrice(Integer price) {
this.price = price;
} public String getPubdate() {
return pubdate;
} public void setPubdate(String pubdate) {
this.pubdate = pubdate;
} public Integer getFloorage() {
return floorage;
} public void setFloorage(Integer floorage) {
this.floorage = floorage;
} public String getContact() {
return contact;
} public void setContact(String contact) {
this.contact = contact;
} public Integer getUserid() {
return userid;
} public void setUserid(Integer userid) {
this.userid = userid;
} public Integer getStreetid() {
return streetid;
} public void setStreetid(Integer streetid) {
this.streetid = streetid;
} public Integer getTypeid() {
return typeid;
} public void setTypeid(Integer typeid) {
this.typeid = typeid;
} public Set<Users> getUserss() {
return userss;
} public void setUserss(Set<Users> userss) {
this.userss = userss;
}
}

User(用户表):

package cn.manytomany.entity;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set; /**
* Created by accp on 2017/2/10.
*/
@Entity
@Table(name = "Users")
public class Users {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private String password;
@Column
private String telephone;
@Column
private String username;
@Column
private String isadmin;
/**
* 以房间表作为主导 设置级联
* 只需要保存用户 即可保存房间
*/
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(
name = "RUHS",
joinColumns =@JoinColumn(name = "RUID"),
inverseJoinColumns = @JoinColumn(name = "RHID")
)
private Set<House> houses=new HashSet<House>(); public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getTelephone() {
return telephone;
} public void setTelephone(String telephone) {
this.telephone = telephone;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getIsadmin() {
return isadmin;
} public void setIsadmin(String isadmin) {
this.isadmin = isadmin;
} public Set<House> getHouses() {
return houses;
} public void setHouses(Set<House> houses) {
this.houses = houses;
}
}

第二步:在hibernate.cfg.xml文件中配置<mapping>节点

<mapping class="cn.manytomany.entity.House"/>
<mapping class="cn.manytomany.entity.Users"/>

第三步:书写测试类

package cn.manytomany.test;

import cn.manytomany.entity.House;
import cn.manytomany.entity.Users;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; /**
* Created by accp on 2017/2/10.
*/
public class DemoTest {
Configuration cfg;
Session session;
Transaction tx;
@Before
public void myBefore(){
cfg=new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
session = factory.openSession();
tx=session.beginTransaction();
}
@After
public void myAfter(){
tx.commit();
session.close();
}
@Test
public void add(){ Users users1=new Users();
users1.setName("hiber1");
users1.setPassword("");
users1.setTelephone("");
users1.setUsername("Jim");
users1.setIsadmin(""); Users users2=new Users();
users2.setName("hiber2");
users2.setPassword("");
users2.setTelephone("");
users2.setUsername("Jim2");
users2.setIsadmin(""); House house=new House();
house.setTitle("元宵佳节房屋便宜");
house.setDescription("经济实惠,元宵佳宿!");
house.setPrice();
house.setPubdate("2017-02-11");
house.setFloorage();
house.setContact("圆圆");
house.setStreetid();
house.setTypeid(); House house2=new House();
house2.setTitle("共度元宵");
house2.setDescription("便宜喽,赶快下手!");
house2.setPrice();
house2.setPubdate("2017-01-10");
house2.setFloorage();
house2.setContact("佳佳");
house2.setStreetid();
house2.setTypeid(); /*关联关系
* 同一个房间对应不同的用户
*
* 同一个用户对应不同的房间
* */
users1.getHouses().add(house);
users1.getHouses().add(house2);
users2.getHouses().add(house2); session.save(users1);
session.save(users2);
}
}

在配置多对多时要选取那张表生成第三张表非常重要,在第三张表的外键也要搞清楚。

Hibernate 注解(Annotations 四)多对多双向注解的更多相关文章

  1. Hibernate 注解 (Annotations 三)多对一双向注解

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

  2. Java进阶知识10 Hibernate一对多_多对一双向关联(Annotation+XML实现)

    本文知识点(目录): 1.Annotation 注解版(只是测试建表)    2.XML版 的实现(只是测试建表)    3.附录(Annotation 注解版CRUD操作)[注解版有个问题:插入值时 ...

  3. Hibernate(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看 ...

  4. Hibernate 注解(Annotations 二)一对一双向注解

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

  5. hibernate 映射<四>多对一双向映射

    学生和班级的例子来说,多个学生可以对应一个班级. 1.站在学生角度来说,学生就是多端.那么我们可以通过多对一来维护2者的关系. 2.站在班级的角度来说,班级就是一端.那么我们可以通过一对多啦维护2者的 ...

  6. hibernate之实体@onetomany和@manytoone双向注解(转)

    下面是User类: @onetomany @Entity @Table(name="user") public class User implements Serializable ...

  7. Java进阶知识12 Hibernate多对多双向关联(Annotation+XML实现)

    1.Annotation 注解版 1.1.应用场景(Student-Teacher):当学生知道有哪些老师教,老师也知道自己教哪些学生时,可用双向关联 1.2.创建Teacher类和Student类 ...

  8. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  9. hibernate one-to-many many-to-one 双向注解

    建表语句: DROP TABLE IF EXISTS `t_company`; CREATE TABLE `t_company` ( `companyId` ) unsigned NOT NULL A ...

随机推荐

  1. SpringMvc HttpMessageConverter之@ResponseBody

    我们先看HttpMessageConverter的示意图,从图片可以看出它是多么的重要.在一条必经之路截道了的感觉. 先上我的测试例子: jsp页面: <%@ page language=&qu ...

  2. sqlplus登录远程数据库与数据导出

    一.登录 1.cmd中输入sqlplus /nolog 2.链接数据库,root是用户名,root123是密码,ORCL是数据库名.conn root/root123@192.168.1.27:152 ...

  3. 2016级算法期末上机-E.中等·ModricWang's Fight with DDLs II

    1125 ModricWang's Fight with DDLs II 思路 圆内被划分部分数的计算方式如下: 圆内部的每一个交点都使得总份数增加了一:除此之外,每一根直线段最后抵达圆周时,总份数也 ...

  4. QuantLib 金融计算——QuantLib 入门

    目录 QuantLib 金融计算--QuantLib 入门 简介 主要功能 安装与使用 学习指南 The HARD Way The EASY Way QuantLib 金融计算--QuantLib 入 ...

  5. PXE+Kickstart 批量安装CentOS 7

    安装之前 将需要安装 CentOS 的服务器与 PXE 服务器通过网络设备连接:PXE 服务器安装 CentOS,并且关闭firewalld.selinux,设置静态IP地址,本例设为10.0.0.1 ...

  6. windows 下 pyinstaller distutils not included with latest virtualenv (16.4.0)

    起因 因为windows下python3.7.2内置venv虚拟环境下pyinstaller错误问题,切换virtualenv但是发现最新版本又有其他问题 - -! ModuleNotFoundErr ...

  7. Docker 入门相关

    什么是Docker和容器 可能是把Docker的概念讲的最清楚的一篇文章 为什么要用Docker 相关网址 Window平台Docker下载 一些基本知识 Volume docker volume l ...

  8. 虚拟机下设置CentOS 7使用固定IP地址

    1.设置虚拟机使用桥接网络 2.查看安装虚拟机软件的电脑IP信息 3.启动CentOS 7进行设置

  9. Linux - iptables firewalld

    目录 iptables firewalld iptables 1.iptables 的基本使用 启动: service start iptabls 关闭: service stopiptabls 查看 ...

  10. Altium Designer安装孔周围放置圆形Polygon Pour Cutout

    1.  在Keep-Out层画2个圆, 中间的圆用作安装孔, 外圆做为禁止覆铜层. 这样做的好处是,放好安装孔后, 外面禁止覆铜层也覆不上铜, 防止螺钉与覆铜接触. 2. 选中外圆, Tools -& ...