jpa使用manyToOne(opntional=true)踩過的坑及解決
jpa使用manyToOne(opntional=true)踩坑
@ManyToOne用于一對多的情況
(默認情況下是懶加載的,沒必要去配置哦)如:一個account可以對應(yīng)多個accountPrivilege
@Entity
@Table(name = ACCOUNT_PRIVILEGE)
public class AccountPrivilege extends EntityId {
// 賬號
@ManyToOne(optional = false)
@JoinColumn(name = ACCOUNT_PRIVILEGE_ACCOUNT, nullable = false)
private Account account;
}
但是加上@ManyToOne(optional=false)出現(xiàn)了一些問題。
jpa將數(shù)據(jù)庫那個字段默認置為0,在查詢時,數(shù)據(jù)庫找不到account.id=0的記錄!!
通過查閱一些資料,發(fā)現(xiàn):
optional屬性是定義該關(guān)聯(lián)類是否必須存在,值為false 時,關(guān)聯(lián)類雙方都必須存在,如果關(guān)系被維護端不存在,查詢的結(jié)果為null。
值為true 時, 關(guān)系被維護端可以不存在,查詢的結(jié)果仍然會返回關(guān)系維護端,在關(guān)系維護端中指向關(guān)系被維護端的屬性為null。optional屬性的默認值是true。
optional 屬性實際上指定關(guān)聯(lián)類與被關(guān)聯(lián)類的join 查詢關(guān)系,如optional=false 時join 查詢關(guān)系為inner join, optional=true 時join 查詢關(guān)系為left join。
在我們不保證該字段關(guān)聯(lián)的記錄一定存在的情況下,使用@ManyToOne或@ManyToOne(optional=true)是比較方便的。
在我把@ManyToOne(optional=false)改為@ManyToOne后,jpa將數(shù)據(jù)庫那個字段默認置為null。
@manytoone設(shè)置為optional=true不起作用
@manytoone
optional屬性的默認值是true。
optional 屬性實際上指定關(guān)聯(lián)類與被關(guān)聯(lián)類的join 查詢關(guān)系,如optional=false 時join 查詢關(guān)系為inner join, optional=true 時join 查詢關(guān)系為left join。
但是實際運行中,語句一直為innerjoin 設(shè)置為optional=true不起作用
原因
dc.createAlias("org", "org"); 本來寫在User user = UserUtils.getUser(); 下面,如果去掉則是正確的
public Page<Site> find(Page<Site> page, Site siteMain) {
DetachedCriteria dc = siteMainDao.createDetachedCriteria();
// 判斷是否是主站、超級管理員
User user = UserUtils.getUser();
return siteMainDao.find(page, dc);
}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
logback StatusListener的定義方法源碼解讀
這篇文章主要為大家介紹了logback StatusListener的定義方法源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Spring+Quartz配置定時任務(wù)實現(xiàn)代碼
這篇文章主要介紹了Spring+Quartz配置定時任務(wù)實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
SpringBoot項目 文件上傳臨時目標(biāo)被刪除異常的處理方案
這篇文章主要介紹了SpringBoot項目 文件上傳臨時目標(biāo)被刪除異常的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
IDEA創(chuàng)建Maven工程Servlet的詳細教程
這篇文章主要介紹了IDEA創(chuàng)建Maven工程Servlet的詳細教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
Java中final,finally,finalize?有什么區(qū)別
這篇文章主要給大家分享的是?Java中final,finally,finalize?到底有什么區(qū)別,文章圍繞final,finally,finalize的相關(guān)資料展開詳細內(nèi)容,具有一定的參考的價值,需要的朋友可以參考一下2021-11-11
Springboot事件和bean生命周期執(zhí)行機制實例詳解
這篇文章主要介紹了Springboot事件和bean的生命周期執(zhí)行機制,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03

