jpa--9.單向多對一
1 單向多對一
1.1 概念
只有一方維護
1.2 配置
一個訂單隻有一個使用者,一個使用者多個訂單
使用 @ManyToOne來對映多對一的關聯關係, fetch屬性來修改預設的關聯屬性的載入策略
使用 @JoinColumn來對映外來鍵.
@JoinColumn(name="CUSTOMER_ID")
@ManyToOne(fetch=FetchType.LAZY)
1.3 資料生成資訊
Order表會產生外來鍵
1.4 測試準備
1.4.1 Customer
@Table(name="JPA_CUTOMERS") @Entity public classCustomer { private Integer id; private String lastName; private String email; private int age; private Date createdTime; private Date birth; @GeneratedValue(strategy=GenerationType.AUTO) @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name = "last_name",length = 50, nullable = false) public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Temporal(TemporalType.TIMESTAMP) public Date getCreatedTime() { return createdTime; } public void setCreatedTime(Date createdTime) { this.createdTime = createdTime; } @Temporal(TemporalType.DATE) public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } }
1.4.2 Order
@Table(name="JPA_ORDERS") @Entity public classOrder { private Integer id; private String orderName; private Customer customer; @GeneratedValue @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name="ORDER_NAME") public String getOrderName() { return orderName; } public void setOrderName(String orderName) { this.orderName = orderName; } //對映單向 n-1 的關聯關係 //使用 @ManyToOne 來對映多對一的關聯關係, fetch 屬性來修改預設的關聯屬性的載入策略 //使用 @JoinColumn來對映外來鍵. @JoinColumn(name="CUSTOMER_ID") @ManyToOne(fetch=FetchType.LAZY) public Customer getCustomer(){ return customer; } public void setCustomer(Customer customer) { this.customer = customer; } }
1.4.3 準備JPATest
public classJPATest { private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; private EntityTransaction transaction; @Before public void init(){ entityManagerFactory= Persistence.createEntityManagerFactory("jpa_test1"); entityManager = entityManagerFactory.createEntityManager(); transaction = entityManager.getTransaction(); transaction.begin(); } @After public void destroy(){ transaction.commit(); entityManager.close(); entityManagerFactory.close(); } }
2 操作
2.1 儲存
建議先儲存一的一方,再儲存多的一方,就不會出現update語句
2.1.1 測試先多再一
先儲存一的一端,再儲存多的一端
/**
* 儲存多對一時, 建議先儲存 1 的一端, 後儲存 n 的一端, 這樣不會多出額外的 UPDATE 語句.
*/
@Test
public void testManyToOnePersist(){
Customercustomer= newCustomer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("[email protected]");
customer.setLastName("GG");
Orderorder1= newOrder();
order1.setOrderName("G-GG-1");
Orderorder2= newOrder();
order2.setOrderName("G-GG-2");
//設定關聯關係
order1.setCustomer(customer);
order2.setCustomer(customer);
//執行儲存操作
entityManager.persist(order1);
entityManager.persist(order2);
entityManager.persist(customer);
}
2.1.2 測試先一再多
/**
* 儲存多對一時, 建議先儲存 1 的一端, 後儲存 n 的一端, 這樣不會多出額外的 UPDATE 語句.
*/
@Test
public void testManyToOnePersist2(){
Customercustomer= newCustomer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("[email protected]");
customer.setLastName("GG");
Orderorder1= newOrder();
order1.setOrderName("G-GG-1");
Orderorder2= newOrder();
order2.setOrderName("G-GG-2");
//設定關聯關係
order1.setCustomer(customer);
order2.setCustomer(customer);
//執行儲存操作(先一再多)
entityManager.persist(customer);
entityManager.persist(order1);
entityManager.persist(order2);
}
2.2 查詢(oid)
2.2.1 預設載入
查詢多方
//預設情況下, 使用左外連線的方式來獲取 n 的一端的物件和其關聯的 1 的一端的物件.
//可使用 @ManyToOne 的 fetch 屬性來修改預設的關聯屬性的載入策略
@Test
public void testManyToOneFind(){
Orderorder= entityManager.find(Order.class, 1);
System.out.println(order.getOrderName());
System.out.println(order.getCustomer().getLastName());
}
2.2.2 懶載入
懶載入:當呼叫時,才傳送查詢sql語句
2.3 刪除(多方)
只能刪除多的一方
//不能直接刪除 1 的一端, 因為有外來鍵約束.
@Test
public void testManyToOneRemove(){
Orderorder= entityManager.find(Order.class, 1);
entityManager.remove(order);
// 不能刪除1的一方
// Customercustomer = entityManager.find(Customer.class, 1);
// entityManager.remove(customer);
}
2.4 更新
只要是針對多方,一方就直接單表了
@Test
public void testManyToOneUpdate(){
Orderorder= entityManager.find(Order.class, 2);
order.getCustomer().setLastName("FFF");
}
原始碼:https://download.csdn.net/download/qq_26553781/10320230
相關推薦
jpa--9.單向多對一
1 單向多對一1.1 概念只有一方維護1.2 配置一個訂單隻有一個使用者,一個使用者多個訂單 使用 @ManyToOne來對映多對一的關聯關係, fetch屬性來修改預設的關聯屬性的載入策略 使用 @JoinColumn來對映外來鍵. @JoinC
JPA:對映單向多對一關聯關係
1.單向多對一是jpa中常用的關聯關係,這裡以訂單和顧客舉例子(多個訂單可以對應同一顧客) 2.顧客實體類程式碼如下: package com.wayne.helloworld; import java.util.Date; import javax.persistence.Colu
JPA(五):映射關聯關系------映射單向多對一的關聯關系
span AS 127.0.0.1 mysql5 單向 cti isa 嘗試 sequence 映射單向多對一的關聯關系 新建Customer.java: package com.dx.jpa.singlemanytoone; import java.ut
JPA 菜鳥教程 3 單向多對一
GitHub JPA中的@ManyToOne 主要屬性 - name(必需): 設定“many”方所包含的“one”方所對應的持久化類的屬性名 - column(可選): 設定one方的主鍵,即持久化類的屬性對應的表的外來鍵 - class
Hibernate單向“多對一”關聯
額外 generator nat col 方式 單向 key null option 1. 基於外鍵關聯的單向“多對一”關聯是最常見的單向關聯其中指定many-to-one的unique="true",為單向“一對一”,不指定就是單向“多對一” <class name
(十二)Hibernate中的多表操作(1):單向多對一
art 保存 int gen round t對象 情況 映射文件 拋出異常 由“多”方可知“一”方的信息,比如多個員工使用同一棟公寓,員工可以知道公寓的信息,而公寓無法知道員工的信息。 案例一: pojo類 public class Department {
Hibernate單向多對一映射關系(1)
關聯 hbm.xml factor ngs actor cnblogs conf ima 一個 單向 n-1 單向 n-1 關聯只需從 n 的一端可以訪問 1 的一端 域模型: 從 Order 到 Customer 的多對一單向關聯需要在Order 類中定義一個 Custo
Mybatis單向多對一
ron itl private list url html -- nta 編寫 一、假定一個父母有多個孩子,那父母和孩子對應關系為1對多。 二、 1、添加依賴包,參考上篇文章 Mybatis+mysql入門使用 2、初始化數據庫和初始數據,以mysql為例
hibernate中配置單向多對一關聯,和雙向一對多
findstr man dea exc prop imp pri 找到 基礎 什麽是一對多,多對一?雙向多對一和雙向一對多是不是同一個概念? 是一個概念,雙向多對一和雙向一對多都是配置一個 一對多和多對一 一對多,比如你去找一個父親的所有孩子,孩子可能有兩個,三個
Hibernate 單向多對一、單向一對多、雙向一對多關聯關係詳解
一對多關係是最普遍的對映關係。比如部門和職工 一對多:從部門的角度,一個部門對應多個職工 多對一:從職工的角度,多個職工對應一個部門 資料庫表中結構: 表 department:did departname 表 Employee:eid en
JPA多對一單向關聯
單向關聯 com 使用 gpo false jpa log post 關聯 在實際開發過程中,JPA多對一單向關聯是使用最多的關聯方式。 下面是訂單與訂單項的配置關系。 訂單(Order):一的一方,不進行任何配置 @Entity @Table(name
hibernate5(9)註解對映[1]多對一單向關聯
在部落格網站中,我們可能需要從某一篇文章找到其所關聯的作者,這就需要從文章方建立起對使用者的關聯,即是多對一的對映關係。 現在先看一個配置例項:我們的文章實體類 package com.zeng.model; import javax.persistenc
hibernate之多對一單向關聯
als exce 方法 試用 size code 產生 配置文件 sse 一個工作組(Group)裏能夠有多個用戶(User),一個User僅僅屬於一個Group,這是典型的多對一的關系。在多對一的關系中正確的數據庫設計是在多的這方(在這裏是User這方
一口一口吃掉Hibernate(四)——多對一單向關聯映射
mark frame 自動 exce itl format 表之間 cfg.xml pda hibernate對於數據庫的操作,全部利用面向對象的思維來理解和實現的。一般的單獨表的映射,相信大家都沒有問題,但是對於一些表之間的特殊關系,Hibernate提供了一些獨特的方式
Hibernate,關係對映的多對一單向關聯、多對一雙向關聯、一對一主鍵關聯、一對一外來鍵關聯、多對多關係關聯
2018-11-10 22:27:02開始寫 下圖內容ORM、Hibernate介紹、hibername.cfg.xml結構: 下圖內容hibernate對映檔案結構介紹 下圖內容hibernate
Hibernate,關系映射的多對一單向關聯、多對一雙向關聯、一對一主鍵關聯、一對一外鍵關聯、多對多關系關聯
nat 延遲加載 alt ima orm 雙向關聯 映射文件 結構 spa 2018-11-10 22:27:02開始寫 下圖內容ORM、Hibernate介紹、hibername.cfg.xml結構: 下圖內容hibernate映射文件結構介紹
JPA表關聯關係(多對一、一對多、多對多、一對一)
小提示:外來鍵在哪邊,那邊就是多方哦!! 單向多對一: 給多方加上 @ManyToOne ex:【產品類Product--多方 ,產品分類ProductDir--一方】 單向一對多:給一方加上 @OneToMany ex
Hibernate配置單向一對多或多對一,出現 org.hibernate.MappingException: Repeated column in mapping for entity5
報錯情況就是這樣,網上一般情況是說的 使用的Hibernate實體類對映資料庫時 配置對應 對映時出現了重複情況** should be mapped with insert=“false” update=“false”) 主要是因為 資料庫裡面的欄位只能對映到
一口一口吃掉Hibernate(四)——多對一單向關聯對映
【轉自 http://blog.csdn.net/xiaoxian8023 】 https://blog.csdn.net/xiaoxian8023/article/details/12249889 可能有人會對這2篇部落格的題目有點混淆不清,跟日常說的關係有點不同。我們
[增刪改查] 最規範的 JPA 一對多/多對一 CRUD 示例
一、前言 1、多對一,一對多,都是一樣的,反過來了而已。 2、之前寫過一篇不使用主外來鍵關係的多表 CRUD: [增刪改查] 最簡單的 JPA 一對多/多對一 CRUD 設計 雖可以幫助新手快速使用 JPA,但是這樣是不嚴謹的,特別是記錄的刪除,有了主