JPA 菜鳥教程 3 單向多對一
GitHub
JPA中的@ManyToOne
主要屬性
- name(必需): 設定“many”方所包含的“one”方所對應的持久化類的屬性名
- column(可選): 設定one方的主鍵,即持久化類的屬性對應的表的外來鍵
- class(可選): 設定one方對應的持久化類的名稱,即持久化類屬性的型別
- not-null(可選): 如果為true,,表示需要建立相互關聯的兩個表之間的外來鍵約束
- cascade(可選): 級聯操作選項,預設為none
單向多對一(@ManyToOne)關聯是最常見的單向關聯關係。假設多種商品(Product)可以有一個商品型別(ProductType),只關心商品(Product)實體找到對應的商品型別(ProductType)實體,而無須關心從某個商品型別(ProductType)找到全部商品(Product).
單向多對一表的ddl語句
CREATE TABLE `t_product_type` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `t_product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`type_id` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_oyt6r2g6hwbyee5adel4yj59e` (`type_id`),
CONSTRAINT `FK_oyt6r2g6hwbyee5adel4yj59e` FOREIGN KEY (`type_id`) REFERENCES `t_product_type` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Product
package com.jege.jpa.many2one;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
/**
* @author JE哥
* @email [email protected]
* @description:單向:多個產品屬於同一個產品型別
*/
@Entity
@Table(name = "t_product")
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
// 多對一:optional=false表示外來鍵type_id不能為空
@ManyToOne(optional = true)
@JoinColumn(name = "type_id")
private ProductType type;
public Product() {
}
public Product(String name, ProductType type) {
this.name = name;
this.type = type;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ProductType getType() {
return type;
}
public void setType(ProductType type) {
this.type = type;
}
@Override
public String toString() {
return "Product [id=" + id + ", name=" + name + "]";
}
}
ProductType
package com.jege.jpa.many2one;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author JE哥
* @email [email protected]
* @description:單向
*/
@Entity
@Table(name = "t_product_type")
public class ProductType {
@Id
@GeneratedValue
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "ProductType [id=" + id + ", name=" + name + "]";
}
}
Many2OneTest
package com.jege.jpa.many2one;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author JE哥
* @email [email protected]
* @description:單向多對一Test
*/
public class Many2OneTest {
private static EntityManagerFactory entityManagerFactory = null;
private EntityManager entityManager = null;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
entityManagerFactory = Persistence.createEntityManagerFactory("com.jege.jpa");
}
// 要求:一次性儲存1個產品型別,儲存2個產品
// 單向多對一儲存的時候必須先儲存一方,否則會出現多餘的update語句,從而影響效能
@Before
public void persist() throws Exception {
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
ProductType type = new ProductType();
type.setName("產品型別1");
// 傳入type的本質是處理資料庫product表的type_id外來鍵
Product product1 = new Product("產品1", null);
Product product2 = new Product("產品2", type);
System.out.println("儲存之前:" + type);
entityManager.persist(type);// JPA會自動把儲存後的主鍵放到當前物件的id裡面
System.out.println("儲存之後:" + type);
entityManager.persist(product1);
entityManager.persist(product2);
System.out.println("++++++++++++++++++++");
}
// 可以通過多方Product獲取一方ProductType是否為null,來判斷是否有產品型別
@Test
public void find() throws Exception {
Product product = entityManager.find(Product.class, 2L);
System.out.println(product);
ProductType type = product.getType();
if (type == null) {
System.out.println("當前產品是沒有產品型別的");
} else {
System.out.println("當前產品是有產品型別的");
}
}
@After
public void tearDown() throws Exception {
entityManager.getTransaction().commit();
if (entityManager != null && entityManager.isOpen())
entityManager.close();
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
if (entityManagerFactory != null && entityManagerFactory.isOpen())
entityManagerFactory.close();
}
}
其他關聯專案
原始碼地址
如果覺得我的文章或者程式碼對您有幫助,可以請我喝杯咖啡。
您的支援將鼓勵我繼續創作!謝謝!
相關推薦
JPA 菜鳥教程 3 單向多對一
GitHub JPA中的@ManyToOne 主要屬性 - name(必需): 設定“many”方所包含的“one”方所對應的持久化類的屬性名 - column(可選): 設定one方的主鍵,即持久化類的屬性對應的表的外來鍵 - class
JPA 菜鳥教程 6 單向多對多
GitHub JPA中的@ManyToMany @ManyToMany註釋表示模型類是多對多關係的一端。 @JoinTable 描述了多對多關係的資料表關係。 name 屬性指定中間表名稱 joinColumns 定義中間表與Teach
JPA 菜鳥教程 15 繼承-一個表-SINGLE_TABLE
column turn rate pre school fill 技術 一個表 tor 原地址:http://blog.csdn.net/JE_GE/article/details/53678422 繼承映射策略 一個類繼承結構一個表的策略,最終只生成一個表,這是繼承映射的
Java 8 新特性-菜鳥教程 (3) -Java 8 函數式接口
但是 style vax arr 結果 友好 face todo 兩個 Java 8 函數式接口 函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。 函數式接口可以被隱式轉換為lambda表達式。 函數式接口
JPA(五):映射關聯關系------映射單向多對一的關聯關系
span AS 127.0.0.1 mysql5 單向 cti isa 嘗試 sequence 映射單向多對一的關聯關系 新建Customer.java: package com.dx.jpa.singlemanytoone; import java.ut
JPA:對映單向多對一關聯關係
1.單向多對一是jpa中常用的關聯關係,這裡以訂單和顧客舉例子(多個訂單可以對應同一顧客) 2.顧客實體類程式碼如下: package com.wayne.helloworld; import java.util.Date; import javax.persistence.Colu
JPA 菜鳥教程 19 jpa uuid主鍵生成策略
GitHub ddl語句 CREATE TABLE `t_user` ( `id` varchar(32) NOT NULL, `name` varchar(255) DEFAU
jpa--9.單向多對一
1 單向多對一1.1 概念只有一方維護1.2 配置一個訂單隻有一個使用者,一個使用者多個訂單 使用 @ManyToOne來對映多對一的關聯關係, fetch屬性來修改預設的關聯屬性的載入策略 使用 @JoinColumn來對映外來鍵. @JoinC
JPA 菜鳥教程 2 單表操作
GitHub JPA Sun官方提出的Java持久化規範。它為Java開發人員提供了一種物件/關係對映工具來管理Java應用中的關係資料。他的出現主要是為了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate、TopLink等OR
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 找到 基礎 什麽是一對多,多對一?雙向多對一和雙向一對多是不是同一個概念? 是一個概念,雙向多對一和雙向一對多都是配置一個 一對多和多對一 一對多,比如你去找一個父親的所有孩子,孩子可能有兩個,三個
[學習筆記]菜鳥教程Swift知識點總結(一)
目錄基本語法資料型別變數、常量可選型別字面量運算子 基本語法 Swift 的多行註釋可以巢狀在其他多行註釋內部。寫法是在一個多行註釋塊內插入另一個多行註釋。第二個註釋塊封閉時,後面仍然接著第一個註釋塊
Hibernate 單向多對一、單向一對多、雙向一對多關聯關係詳解
一對多關係是最普遍的對映關係。比如部門和職工 一對多:從部門的角度,一個部門對應多個職工 多對一:從職工的角度,多個職工對應一個部門 資料庫表中結構: 表 department:did departname 表 Employee:eid en
JPA多對一單向關聯
單向關聯 com 使用 gpo false jpa log post 關聯 在實際開發過程中,JPA多對一單向關聯是使用最多的關聯方式。 下面是訂單與訂單項的配置關系。 訂單(Order):一的一方,不進行任何配置 @Entity @Table(name
【Dubbo菜鳥教程】3、dubbo監控中心的搭建
dubbo監控中心就是dubbo提供給我們的一個web管理平臺,到官方下載dubbo-admin下載部署到本地tomcat,訪問路徑即可搭建成功 1、下載dubbo-admin到本地
Spring Boot 菜鳥教程 28 多配置檔案
GitHub 需求產生 開發過程中可能會有如下需求:開發和部署的配置資訊可能不同,常規的方式就是在配置檔案裡面先寫好開發配置,在部署的時候再去修改這些配置,這樣可能會出現很多問題,比如使用者名稱、密碼忘記了修改或者改錯了等問題。 專案結構圖片
hibernate之多對一單向關聯
als exce 方法 試用 size code 產生 配置文件 sse 一個工作組(Group)裏能夠有多個用戶(User),一個User僅僅屬於一個Group,這是典型的多對一的關系。在多對一的關系中正確的數據庫設計是在多的這方(在這裏是User這方