基於註解的Hibernate JPA操作CRUD(單表、一對多和多對多)
阿新 • • 發佈:2018-12-16
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();
}
}