2. spring data jpa一對多的相關操作
客戶表的建表語句:
create
table
`cst_customer`
(`cust_id`
bigint(32
)not
null
auto_increment
comment
'客戶編號(主鍵)'
,`cust_name`
varchar(32
)not
null
comment
'客戶名稱(公司名稱)'
,`cust_user_id`
bigint(32
)default
null
comment
'負責人id'
,`cust_create_id`
bigint(32
)default
null
comment
'建立人id'
,`cust_source`
varchar(32
)default
null
comment
'客戶資訊**'
,`cust_industry`
varchar(32
)default
null
comment
'客戶所屬行業'
,`cust_level`
varchar(32
)default
null
comment
'客戶級別'
,`cust_linkman`
varchar(64
)default
null
comment
'聯絡人'
,`cust_phone`
varchar(64
)default
null
comment
'固定**'
,`cust_mobile`
varchar(16
)default
null
comment
'移動**'
,primary
key(
`cust_id`))
engine
=innodb
auto_increment=1
default
charset
=utf8;
聯絡人表的建表語句:
create
table
`cst_linkman`
(`lkm_id`
bigint(32
)not
null
auto_increment
comment
'聯絡人編號(主鍵)'
,`lkm_name`
varchar(16
)default
null
comment
'聯絡人姓名'
,`lkm_cust_id`
bigint(32
)not
null
comment
'客戶id'
,`lkm_gender`
char(1
)default
null
comment
'聯絡人性別'
,`lkm_phone`
varchar(16
)default
null
comment
'聯絡人辦公**'
,`lkm_mobile`
varchar(16
)default
null
comment
'聯絡人手機'
,`lkm_email`
varchar(64
)default
null
comment
'聯絡人郵箱'
,`lkm_qq`
varchar(16
)default
null
comment
'聯絡人qq'
,`lkm_position`
varchar(16
)default
null
comment
'聯絡人職位'
,`lkm_memo`
varchar
(512
)default
null
comment
'聯絡人備註'
,primary
key(
`lkm_id`),
key`fk_cst_linkman_lkm_cust_id`
(`lkm_cust_id`),
constraint
`fk_cst_linkman_lkm_cust_id`
foreign
key(
`lkm_cust_id`
)references
`cst_customer`
(`cust_id`)on
delete
noaction
onupdate
noaction
)engine
=innodb
auto_increment=3
default
charset
=utf8;
客戶的實體類如下:
@entity
@table
(name=
"cst_customer"
)public
class
customer
implements
serializable
聯絡人的實體類如下:
@entity
@table
(name=
"cst_linkman"
)public
class
linkman
implements
serializable
客戶的dao層介面如下:
public
inte***ce
customerdao
extends
jparepository
, jpaspecificationexecutor
聯絡人的dao層介面如下:
public
inte***ce
linkmandao
extends
jparepository
, jpaspecificationexecutor
@runwith
(springjunit4classrunner.
class
)@contextconfiguration
(locations=
)public
class
onetomanytest
}
@test
public
void
test1()
通過上面的**,我們可以發現當我們建立了雙向的關聯關係之後,先儲存主表,再儲存從表時,會產生2條insert和1條update,而實際開發中我們只需要2條insert。
原因是在客戶實體類上(一的一方)新增了外來鍵了配置,所以對於客戶而言,也具備了維護外來鍵的作用。那我們的解決是思路很簡單,就是一的一方放棄維護權。放棄外來鍵維護權需要將客戶實體類的一對多配置改為:
@entity
@table
(name=
"cst_customer"
)public
class
customer
implements
serializable
@test
public
void
test2()
刪除操作的說明如下:
級聯操作:指操作乙個物件同時操作它的關聯物件。使用方法:只需要在操作主體的註解上配置cascade。
延遲載入:就是當在真正需要資料的時候,才真正執行資料載入操作。使用方法:只需要在操作主體的註解上配置fetch。
/**
* cascade:配置級聯操作
* cascadetype.merge:級聯更新
* cascadetype.persist:級聯儲存
* cascadetype.refresh:級聯重新整理
* cascadetype.remove:級聯刪除
* cascadetype.all:包含所有
* fetch:配置關聯物件的載入方式
* fetchtype.eager:立即載入
* fetchtype.lazy:延遲載入
*/@onetomany
"customer"
, cascade=cascadetype.all, fetch=fetchtype.lazy)
Spring Data JPA 學習筆記(一)
spring data jpa 是基於orm框架,jpa規範的封裝的一套jpa應用框架,可使開發者用極簡的 即可實現對資料的訪問和操作。它提供了包括增刪改查等在內的常用功能,且易於擴充套件!spring data jpa提供的常用程式設計介面 repository 最頂層的乙個介面,是乙個空介面,目...
spring data jpa遇到的坑
1 column註解name最好全寫了,不然遇到像hibernate駝峰和下劃線風格配置變更時會出現找不到屬性,尤其開啟自動建表情況 2 唯讀操作情況,如果對讀取物件進行了屬性修改操作,那麼jpa會認為你要修改這個實體,使用hibernate的情況下回預設執行乙個update的sql,然後你懂得由於...
spring Data Jpa的分頁管理
通過jpa大大簡化了我們對資料庫的開發工作。但是,之前的例子中我們只提到了最簡單的crud 增刪改查 操作。實際上,spring data jpa對於分頁以及排序的查詢也有著完美的支援,接下來,我們來學習如何通過pageable來對資料庫進行分頁查詢。一 pageable 是spring data庫...