Hibernate 注解(Annotations 四)多对多双向注解
2024-10-12 12:53:02
注解(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);
}
}
在配置多对多时要选取那张表生成第三张表非常重要,在第三张表的外键也要搞清楚。
最新文章
- python学习笔记(二)
- oracle(sql)基础篇系列(一)&mdash;&mdash;基础select语句、常用sql函数、组函数、分组函数
- python执行linux shell管道输出内容
- Gradle Cheat Sheet
- Haproxy配置支持https获取用户IP地址
- oracle 语句创建表空间、用户、授权
- 笔记本显示器坏了,从硬盘安装win7系统
- 关于js unshift() 与pop() 功能
- 发送邮件(遵循smtp协议即简单的邮件发送协议)
- android学习——android架构
- jQuery(二)
- 基于swift MKMapkit 开发的地图定位导航
- LINQ学习系列-----1.4 匿名对象
- badboy 录制脚本并并发脚本
- 【OpenGL】理解一些基本问题
- sh -c
- 弹框在UC浏览器或者Android机器上会被顶上去
- Spring Boot重定向的使用方法
- python两段多线程的例子
- 以time.py为文件名时,调用time包
热门文章
- 【Map,HashMap,Vector,List】资料汇总
- [CISCO] Telete/SSH 之 Port 绑定/端口安全
- 安装php7
- c语言求方阵的行列式、伴随矩阵算法
- python中json库中的load、loads、dump、dumps的区别与用法
- (RaspBerry Pi) Python GPIO 基本操作
- fd与FILE结构体
- shell-007:数据库备份,本地保留7天,远程机器保留一个月
- SpringMVC初写(二)映射类型、限制和数据绑定
- PHP 对目录下所有TXT进行遍历 并正则进行处理 preg_replace