1、数据库同上一篇(Hibernate多对一关系代码示例(Many-To-One))
//类型表和产品表同上一篇
//新建一个users表,根据实体属性创建字段
2、创建实体类
package com.entity;
import java.util.Set;
/**
* 用户表实体
* Created by lvjun on 2018-03-26.
*/
public class UsersEntity {
int id;
String name;
//添加产品属性ProductEntity
Set<ProductEntity> productEntities;
public Set<ProductEntity> getProductEntities() {
return productEntities;
}
public void setProductEntities(Set<ProductEntity> productEntities) {
this.productEntities = productEntities;
}
//用户属性
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.entity;
import java.util.Set;
/**
* 产品表实体
* Created by lvjun on 2018-03-26.
*/
public class ProductEntity {
int id;
String name ;
float price;
//多对多
Set<UsersEntity> usersEntities;
public Set<UsersEntity> getUsersEntities() {
return usersEntities;
}
public void setUsersEntities(Set<UsersEntity> usersEntities) {
this.usersEntities = usersEntities;
}
//产品表构建参数
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
3、映射文件
ProductEntity.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.entity">
<class name="ProductEntity" table="product">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" />
<property name="price" />
<!--设置多对多关系,中间表-->
<set name="usersEntities" table="user_product" lazy="false">
<key column="pid" />
<many-to-many column="uid" class="UsersEntity" />
</set>
</class>
</hibernate-mapping>
UsersEntity.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.entity">
<class name="UsersEntity" table="users">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="name" />
<!-- 中间表关系 多对多 -->
<set name="productEntities" table="user_product" lazy="false">
<key column="uid" />
<many-to-many column="pid" class="ProductEntity" />
</set>
</class>
</hibernate-mapping>
4、核心文件//同上一篇文章,填加UsersEntity映射
<mapping resource="com/entity/UsersEntity.hbm.xml"/>
5、测试类
package com.test;
import com.entity.ProductEntity;
import com.entity.UsersEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.util.HashSet;
import java.util.Set;
/**
* 多对多关系
* 一个产品可以被多个用户购买
* 一个用户可以购买多个产品
* 实现多对多必须有一张中间表,维护两者之间的关系
* Created by lvjun on 2018-03-26.
*/
public class ManyToMany {
public static void main(String[] args) {
SessionFactory sessionFactory =new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
session.beginTransaction();
//增加3个用户
Set<UsersEntity> users = new HashSet();
for (int i = 0; i < 3; i++) {
UsersEntity u =new UsersEntity();
u.setName("user"+i);
users.add(u);
session.save(u);
}
//产品id=1的 被新增的用户1,2,3购买
ProductEntity p1 = (ProductEntity) session.get(ProductEntity.class, 1);
p1.setUsersEntities(users);
session.save(p1);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}