注解(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);
}
}

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

最新文章

  1. python学习笔记(二)
  2. oracle(sql)基础篇系列(一)&mdash;&mdash;基础select语句、常用sql函数、组函数、分组函数
  3. python执行linux shell管道输出内容
  4. Gradle Cheat Sheet
  5. Haproxy配置支持https获取用户IP地址
  6. oracle 语句创建表空间、用户、授权
  7. 笔记本显示器坏了,从硬盘安装win7系统
  8. 关于js unshift() 与pop() 功能
  9. 发送邮件(遵循smtp协议即简单的邮件发送协议)
  10. android学习——android架构
  11. jQuery(二)
  12. 基于swift MKMapkit 开发的地图定位导航
  13. LINQ学习系列-----1.4 匿名对象
  14. badboy 录制脚本并并发脚本
  15. 【OpenGL】理解一些基本问题
  16. sh -c
  17. 弹框在UC浏览器或者Android机器上会被顶上去
  18. Spring Boot重定向的使用方法
  19. python两段多线程的例子
  20. 以time.py为文件名时,调用time包

热门文章

  1. 【Map,HashMap,Vector,List】资料汇总
  2. [CISCO] Telete/SSH 之 Port 绑定/端口安全
  3. 安装php7
  4. c语言求方阵的行列式、伴随矩阵算法
  5. python中json库中的load、loads、dump、dumps的区别与用法
  6. (RaspBerry Pi) Python GPIO 基本操作
  7. fd与FILE结构体
  8. shell-007:数据库备份,本地保留7天,远程机器保留一个月
  9. SpringMVC初写(二)映射类型、限制和数据绑定
  10. PHP 对目录下所有TXT进行遍历 并正则进行处理 preg_replace