注解(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. python 爬虫 黑科技

    1.最基本的抓站 import urllib2 content = urllib2.urlopen('http://XXXX').read() 2.使用代理服务器 这在某些情况下比较有用,比如IP被封 ...

  2. Azure 部署K8S(二)

    在"China Azure中部署Kubernetes(K8S)集群"一文中,我们使用的ACS Version及Kubernete Version版本都比较低,ACS Version ...

  3. mybatis一级缓存与二级缓存的原理

    1.mybatis中的缓存是在mybatis框架中的Executor中来实现的,我们来看一下Executor的继承图 2.通过以上类图我们可以发现Executor接口下有两大实现类BaseExecut ...

  4. c语言求方阵的行列式、伴随矩阵算法

    #include<stdio.h> #include<math.h> #define N 100 //N比输入的阶数大即可 int main() {   int n,a[N][ ...

  5. Centos7 DNS神奇的配置

    文件 [root@iff etc]# cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to co ...

  6. Neo4j使用简单例子(转)

    Neo4j Versions Most of the examples on this page are written with Neo4j 2.0 in mind, so they skip th ...

  7. Highcharts图表.net版开源,支持webform 和 mvc3,完全开源

    Highcharts是一个制作图表的纯Javascript类库,主要特性如下: 兼容性:兼容当今所有的浏览器,包括iPhone.IE和火狐等等: 对个人用户完全免费: 纯JS,无BS: 支持大部分的图 ...

  8. python3随机生成中文字符

    运行环境在Python3.6下,Python2的解决方案网上有很多. ---2017.10.18 第一种方法:Unicode码 在unicode码中,汉字的范围是(0x4E00, 9FBF) impo ...

  9. 【Kafka源码】Kafka代码模块

    Kafka源码依赖于Scala环境,首先需要安装scala,这块请自行百度进行安装. 传送门 当然,我们要分析源码,需要下载源码,请自行从github上面下载. 说明:本文使用的kafka版本为0.1 ...

  10. 【Kafka】Kafka数据可靠性深度解读

    转帖:http://www.infoq.com/cn/articles/depth-interpretation-of-kafka-data-reliability Kafka起初是由LinkedIn ...