0.maven引入相关依赖资源
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.njnu.ogms</groupId>
<artifactId>hibernateTestDay4_1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>hibernateTestDay4_1 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--log4j-core和log4j-api-->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.1</version>
</dependency>
<!--mysql的数据库驱动-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!--c3p0-->
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.3.6.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>0.2.15</version>
</dependency>
</dependencies>
<build>
<finalName>hibernateTestDay4_1</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
<resources>
<resource>
<directory>
src/main/java
</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
1.编写总配置文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2">
<!--transaction-type:事务类型-->
<!--JTA:JAVA Transaction API-->
<!--RESOURCE_LOCAL:本地代码事务-->
<persistence-unit name="myJPAUnit" transaction-type="RESOURCE_LOCAL">
<!--JPA提供商,可以不写-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!--JPA注解的实体类位置,可以不写-->
<class>domain.CstCustomer</class>
<class>domain.CstLinkman</class>
<class>domain.SysRole</class>
<class>domain.SysUser</class>
<!--以下只要把cfg.xml文件中的拷贝过来稍加改动即可-->
<!--1.连接数据库的信息-->
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hibernate"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123456"/>
<!--2.hibernate可选配置-->
<!--检测实体类的映射配置和数据库的表结构是否一致,如果不一致,更新表结构-->
<property name="hbm2ddl.auto" value="update"/>
<!--数据库方言-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<!--是否显示hibernate生成的sql语句-->
<property name="hibernate.show_sql" value="true"/>
<!--是否使用格式化输出sql语句-->
<property name="hibernate.format_sql" value="true"/>
<!--3.设置hibernate的连接池提供商-->
<property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"/>
</properties>
</persistence-unit>
</persistence>
2.反向生成java实体类
(客户和联系人,一对多)
并在其中写@OneToMany和@ManyToOne注解
用户表:
package domain;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/**
* @Author: David.Xiao
* @Date: 2018/11/13 20:14
* @Description:
*/
@Entity
@Table(name = "cst_customer", schema = "hibernate", catalog = "")
public class CstCustomer {
private long custId;
private String custName;
private String custSource;
private String custIndustry;
private String custLevel;
private String custAddress;
private String custPhone;
private Set<CstLinkman> linkmanSet = new HashSet<>(0);
/**
* mappedBy = "customer" 此方是“被映射”的,不负责维护关系,将维护级联关系的权利交给CstLinkman类中的customer成员
* cascade = CascadeType.PERSIST 级联保存 remove级联删除 all级联保存-删除
* fetch = FetchType.EAGER 立即查询
*/
@OneToMany(targetEntity = CstLinkman.class,mappedBy = "customer",cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
public Set<CstLinkman> getLinkmanSet() {
return linkmanSet;
}
public void setLinkmanSet(Set<CstLinkman> linkmanSet) {
this.linkmanSet = linkmanSet;
}
@Id
@Column(name = "cust_id", nullable = false)
//指定主键生成策略 strategy:使用JPA中提供的主键生成策略;generator使用hibernate中的主键生成策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getCustId() {
return custId;
}
public void setCustId(long custId) {
this.custId = custId;
}
@Basic
@Column(name = "cust_name", nullable = false, length = 32)
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
@Basic
@Column(name = "cust_source", nullable = true, length = 32)
public String getCustSource() {
return custSource;
}
public void setCustSource(String custSource) {
this.custSource = custSource;
}
@Basic
@Column(name = "cust_industry", nullable = true, length = 32)
public String getCustIndustry() {
return custIndustry;
}
public void setCustIndustry(String custIndustry) {
this.custIndustry = custIndustry;
}
@Basic
@Column(name = "cust_level", nullable = true, length = 32)
public String getCustLevel() {
return custLevel;
}
public void setCustLevel(String custLevel) {
this.custLevel = custLevel;
}
@Basic
@Column(name = "cust_address", nullable = true, length = 128)
public String getCustAddress() {
return custAddress;
}
public void setCustAddress(String custAddress) {
this.custAddress = custAddress;
}
@Basic
@Column(name = "cust_phone", nullable = true, length = 64)
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CstCustomer that = (CstCustomer) o;
return custId == that.custId &&
Objects.equals(custName, that.custName) &&
Objects.equals(custSource, that.custSource) &&
Objects.equals(custIndustry, that.custIndustry) &&
Objects.equals(custLevel, that.custLevel) &&
Objects.equals(custAddress, that.custAddress) &&
Objects.equals(custPhone, that.custPhone);
}
@Override
public int hashCode() {
return Objects.hash(custId, custName, custSource, custIndustry, custLevel, custAddress, custPhone);
}
@Override
public String toString() {
return "CstCustomer{" +
"custId=" + custId +
", custName='" + custName + '\'' +
", custSource='" + custSource + '\'' +
", custIndustry='" + custIndustry + '\'' +
", custLevel='" + custLevel + '\'' +
", custAddress='" + custAddress + '\'' +
", custPhone='" + custPhone + '\'' +
'}';
}
}
联系人表:
package domain;
import javax.persistence.*;
import java.util.Objects;
/**
* @Author: David.Xiao
* @Date: 2018/11/13 20:14
* @Description:
*/
@Entity
@Table(name = "cst_linkman", schema = "hibernate", catalog = "")
public class CstLinkman {
private long lkmId;
private String lkmName;
private String lkmGender;
private String lkmPhone;
private String lkmMobile;
private String lkmEmail;
private String lkmPosition;
private String lkmMemo;
private CstCustomer customer;
/**
* 建立多对一的映射关系
* targetEntity = CstCustomer.class 指定所对的一方的实体类名
* name = "lkm_cst_id" 外键字段名 referencedColumnName = "cust_id" 外键对应的主表的主键字段名
*/
@ManyToOne(targetEntity = CstCustomer.class)
@JoinColumn(name = "lkm_cst_id",referencedColumnName = "cust_id")
public CstCustomer getCustomer() {
return customer;
}
public void setCustomer(CstCustomer customer) {
this.customer = customer;
}
@Id
@Column(name = "lkm_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getLkmId() {
return lkmId;
}
public void setLkmId(long lkmId) {
this.lkmId = lkmId;
}
@Basic
@Column(name = "lkm_name", nullable = true, length = 16)
public String getLkmName() {
return lkmName;
}
public void setLkmName(String lkmName) {
this.lkmName = lkmName;
}
@Basic
@Column(name = "lkm_gender", nullable = true, length = 10)
public String getLkmGender() {
return lkmGender;
}
public void setLkmGender(String lkmGender) {
this.lkmGender = lkmGender;
}
@Basic
@Column(name = "lkm_phone", nullable = true, length = 16)
public String getLkmPhone() {
return lkmPhone;
}
public void setLkmPhone(String lkmPhone) {
this.lkmPhone = lkmPhone;
}
@Basic
@Column(name = "lkm_mobile", nullable = true, length = 16)
public String getLkmMobile() {
return lkmMobile;
}
public void setLkmMobile(String lkmMobile) {
this.lkmMobile = lkmMobile;
}
@Basic
@Column(name = "lkm_email", nullable = true, length = 64)
public String getLkmEmail() {
return lkmEmail;
}
public void setLkmEmail(String lkmEmail) {
this.lkmEmail = lkmEmail;
}
@Basic
@Column(name = "lkm_position", nullable = true, length = 16)
public String getLkmPosition() {
return lkmPosition;
}
public void setLkmPosition(String lkmPosition) {
this.lkmPosition = lkmPosition;
}
@Basic
@Column(name = "lkm_memo", nullable = true, length = 512)
public String getLkmMemo() {
return lkmMemo;
}
public void setLkmMemo(String lkmMemo) {
this.lkmMemo = lkmMemo;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CstLinkman that = (CstLinkman) o;
return lkmId == that.lkmId &&
Objects.equals(lkmName, that.lkmName) &&
Objects.equals(lkmGender, that.lkmGender) &&
Objects.equals(lkmPhone, that.lkmPhone) &&
Objects.equals(lkmMobile, that.lkmMobile) &&
Objects.equals(lkmEmail, that.lkmEmail) &&
Objects.equals(lkmPosition, that.lkmPosition) &&
Objects.equals(lkmMemo, that.lkmMemo);
}
@Override
public int hashCode() {
return Objects.hash(lkmId, lkmName, lkmGender, lkmPhone, lkmMobile, lkmEmail, lkmPosition, lkmMemo);
}
@Override
public String toString() {
return "CstLinkman{" +
"lkmId=" + lkmId +
", lkmName='" + lkmName + '\'' +
", lkmGender='" + lkmGender + '\'' +
", lkmPhone='" + lkmPhone + '\'' +
", lkmMobile='" + lkmMobile + '\'' +
", lkmEmail='" + lkmEmail + '\'' +
", lkmPosition='" + lkmPosition + '\'' +
", lkmMemo='" + lkmMemo + '\'' +
'}';
}
}
用户和角色(多对多)
用户:
package domain;
import javax.persistence.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/**
* @Author: David.Xiao
* @Date: 2018/11/14 22:44
* @Description:
*/
@Entity
@Table(name = "sys_user", schema = "hibernate", catalog = "")
public class SysUser {
private long userId;
private String userCode;
private String userName;
private String userPassword;
private String userState;
//必须在任意一方放弃维护权利
@ManyToMany(cascade = CascadeType.ALL,mappedBy = "userSet")
public Set<SysRole> getRoleSet() {
return roleSet;
}
public void setRoleSet(Set<SysRole> roleSet) {
this.roleSet = roleSet;
}
private Set<SysRole> roleSet = new HashSet<>(0);
@Id
@Column(name = "user_id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
@Basic
@Column(name = "user_code", nullable = false, length = 32)
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
@Basic
@Column(name = "user_name", nullable = false, length = 64)
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Basic
@Column(name = "user_password", nullable = false, length = 32)
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
@Basic
@Column(name = "user_state", nullable = false, length = 1)
public String getUserState() {
return userState;
}
public void setUserState(String userState) {
this.userState = userState;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SysUser user = (SysUser) o;
return userId == user.userId &&
Objects.equals(userCode, user.userCode) &&
Objects.equals(userName, user.userName) &&
Objects.equals(userPassword, user.userPassword) &&
Objects.equals(userState, user.userState);
}
@Override
public int hashCode() {
return Objects.hash(userId, userCode, userName, userPassword, userState);
}
}
角色:
package domain;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/**
* @Author: David.Xiao
* @Date: 2018/11/14 22:44
* @Description:
*/
@Entity
@Table(name = "sys_role", schema = "hibernate", catalog = "")
public class SysRole {
private long roleId;
private String roleName;
private String roleMemo;
@ManyToMany(cascade = CascadeType.ALL)
//加入一张表
@JoinTable(name = "sys_user_role", //中间表名
joinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "role_id")}, //当前实体在中间表的外键字段
inverseJoinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "user_id")}) //对方实体在中间表的外键字段
public Set<SysUser> getUserSet() {
return userSet;
}
public void setUserSet(Set<SysUser> userSet) {
this.userSet = userSet;
}
private Set<SysUser> userSet = new HashSet<>(0);
@Id
@Column(name = "role_id", nullable = false)
/* 可用此方法指定主键生成策略为uuid
//声明一个主键生成器 name:生成器的名字 strategy:hibernate中的主键生成策略为uuid
@GenericGenerator(name = "uid",strategy = "uuid")
//指定主键生成器
@GeneratedValue(generator = "uid")*/
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getRoleId() {
return roleId;
}
public void setRoleId(long roleId) {
this.roleId = roleId;
}
@Basic
@Column(name = "role_name", nullable = true, length = 100)
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
@Basic
@Column(name = "role_memo", nullable = true, length = 255)
public String getRoleMemo() {
return roleMemo;
}
public void setRoleMemo(String roleMemo) {
this.roleMemo = roleMemo;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SysRole role = (SysRole) o;
return roleId == role.roleId &&
Objects.equals(roleName, role.roleName) &&
Objects.equals(roleMemo, role.roleMemo);
}
@Override
public int hashCode() {
return Objects.hash(roleId, roleName, roleMemo);
}
}
3.使用hibernate一般要添加log4j日志配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n" />
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
4.JPAUtil类,获取EntityManager
package dao;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
* @Author: David.Xiao
* @Date: 2018/11/13 20:23
* @Description:
*/
public class JPAUtil {
//相当于SessionFactory
private static EntityManagerFactory factory;
static {
factory = Persistence.createEntityManagerFactory("myJPAUnit");
}
//获取操作数据库的对象
public static EntityManager createEntityManager()
{
return factory.createEntityManager();
}
}
5.一般的单表CRUD操作
package dao;
import domain.CstCustomer;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import java.util.List;
import static org.junit.Assert.*;
/**
* @Author: David.Xiao
* @Date: 2018/11/13 21:53
* @Description: JPA操作数据库(单表)
*/
public class normalTest {
@Test
public void createEntityManager() {
JPAUtil.createEntityManager();
}
/**
* 保存
*/
@Test
public void save()
{
CstCustomer customer = new CstCustomer();
customer.setCustName("JPA Customer");
customer.setCustSource("NNU");
customer.setCustIndustry("HHU");
customer.setCustLevel("5");
customer.setCustAddress("佛城西路8号");
customer.setCustPhone("13813811388");
//1.获取EntityManager对象
EntityManager entityManager = JPAUtil.createEntityManager();
//2.开启事务
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
//3.执行保存操作
entityManager.persist(customer);
//4.提交事务
tx.commit();
//5.关闭资源
entityManager.close();
}
/**
* find查询:立即加载
* getReference查询:延迟加载
*/
@Test
public void query()
{
//1.获取EntityManager对象
EntityManager entityManager = JPAUtil.createEntityManager();
//2.开启事务
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
//3.执行查询操作
CstCustomer customer = entityManager.find(CstCustomer.class,5L);
System.out.println(customer.toString());
CstCustomer customer1 = entityManager.getReference(CstCustomer.class,5L);
System.out.println(customer1.toString());
//4.提交事务
tx.commit();
//5.关闭资源
entityManager.close();
}
/**
* 查询所有
* 使用JPQL查询,写法和HQL相似。
* 将表名换成类名,字段名换为属性名
* 查询所有时,不能直接用 from 实体类,而要使用select关键字: select 别名 from 表名 别名
*/
@Test
public void queryByJPQL()
{
//1.获取EntityManager对象
EntityManager entityManager = JPAUtil.createEntityManager();
//2.开启事务
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
//3.执行查询操作
Query query = entityManager.createQuery("select c from CstCustomer c");
Query query1 = entityManager.createQuery("select c from CstCustomer c where custName like ?1 and custLevel like ?2");
query1.setParameter(1,"%老%");
query1.setParameter(2,"vip");
List list = query.getResultList();
for (Object o:list) {
System.out.println(o);
}
List list1 = query1.getResultList();
for (Object o:list1) {
System.out.println(o);
}
//4.提交事务
tx.commit();
//5.关闭资源
entityManager.close();
}
/**
* 更新
*/
@Test
public void update()
{
//1.获取EntityManager对象
EntityManager entityManager = JPAUtil.createEntityManager();
//2.开启事务
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
//3.执行查询操作
CstCustomer customer = entityManager.find(CstCustomer.class,3L);
System.out.println(customer.toString());
customer.setCustName("隔壁老王老王");
//4.提交事务
tx.commit();
//5.关闭资源
entityManager.close();
}
/**
* 更新2
* 使用合并方法(两个实体合并或一个实体也能合并)
*/
@Test
public void update2()
{
//1.获取EntityManager对象
EntityManager entityManager = JPAUtil.createEntityManager();
//2.开启事务
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
//3.执行查询操作
CstCustomer customer = entityManager.find(CstCustomer.class,3L);
customer.setCustName("隔壁老李老李");
entityManager.merge(customer);
//4.提交事务
tx.commit();
//5.关闭资源
entityManager.close();
}
/**
* 删除
*/
@Test
public void delete()
{
//1.获取EntityManager对象
EntityManager entityManager = JPAUtil.createEntityManager();
//2.开启事务
EntityTransaction tx = entityManager.getTransaction();
tx.begin();
//3.执行查询操作
CstCustomer customer = entityManager.find(CstCustomer.class,3L);
entityManager.remove(customer);
//4.提交事务
tx.commit();
//5.关闭资源
entityManager.close();
}
}
6.一对多级联CRUD
package dao;
import domain.CstCustomer;
import domain.CstLinkman;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import static org.junit.Assert.*;
/**
* @Author: David.Xiao
* @Date: 2018/11/14 19:47
* @Description:
*/
public class one2ManyTest {
@Test
public void createEntityManager() {
}
/**
* 级联保存
*/
@Test
public void saveCascade(){
EntityManager entityManager = JPAUtil.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
CstCustomer customer = new CstCustomer();
CstLinkman linkman = new CstLinkman();
customer.setCustName("JPA客户1");
linkman.setLkmName("JPA联系人1");
customer.getLinkmanSet().add(linkman);
linkman.setCustomer(customer);
entityManager.persist(customer);
transaction.commit();
entityManager.close();
}
/**
* 查询与级联更新
*
*/
@Test
public void updateCascade(){
EntityManager entityManager = JPAUtil.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
CstLinkman linkman = new CstLinkman();
linkman.setLkmName("JPA联系人1");
//查询
CstCustomer customer = entityManager.find(CstCustomer.class,5L);
customer.getLinkmanSet().add(linkman);
linkman.setCustomer(customer);
entityManager.persist(customer);
transaction.commit();
entityManager.close();
}
/**
* 级联删除
*
*/
@Test
public void removeCascade(){
EntityManager entityManager = JPAUtil.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
CstCustomer customer = entityManager.find(CstCustomer.class,5L);
entityManager.remove(customer);
transaction.commit();
entityManager.close();
}
}
7.多对多级联操作
package dao;
import domain.SysRole;
import domain.SysUser;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import static org.junit.Assert.*;
/**
* @Author: David.Xiao
* @Date: 2018/11/14 23:05
* @Description:
*/
public class many2ManyTest {
@Test
public void createEntityManager() {
}
@Test
public void saveMany2Many()
{
SysUser user1 = new SysUser();
SysUser user2 = new SysUser();
user1.setUserName("多对多用户1");
user1.setUserCode("duo1");
user1.setUserPassword("123");
user1.setUserState("y");
user2.setUserName("多对多用户2");
user2.setUserCode("duo2");
user2.setUserPassword("123");
user2.setUserState("y");
SysRole role1 = new SysRole();
SysRole role2 = new SysRole();
SysRole role3 = new SysRole();
role1.setRoleName("多对多角色1");
role2.setRoleName("多对多角色2");
role3.setRoleName("多对多角色3");
//建立关系
user1.getRoleSet().add(role1);
user1.getRoleSet().add(role2);
user2.getRoleSet().add(role2);
user2.getRoleSet().add(role3);
role1.getUserSet().add(user1);
role2.getUserSet().add(user1);
role2.getUserSet().add(user2);
role3.getUserSet().add(user2);
EntityManager entityManager = JPAUtil.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
//级联保存
entityManager.persist(user1);
transaction.commit();
entityManager.close();
}
}