我寫了兩個(gè)實(shí)體類,A, B,其中A和B是一對(duì)多的關(guān)系,A類和C類也有主外鍵關(guān)聯(lián)。如下
A類:
@Entity
public class A implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")
@GeneratedValue(generator = "idGenerator")
private String id;
@Column(nullable = false)
@NotBlank
private String name;
@ManyToOne
@JoinColumn(name = "cId", referencedColumnName="id")
private C c;
}
B類:
@Entity
public class B implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")
@GeneratedValue(generator = "idGenerator")
private String id;
@Column(nullable = false)
@NotBlank
private String name;
@ManyToOne
@JoinColumn(name = "aId", referencedColumnName="id")
private A a;
}
在做查詢的時(shí)候,BRepository.findOne(id) 的執(zhí)行速度非常慢,大概要6s,但是用BRepository.findFirstById(id) 就快很多,大概是100ms。
其中ARepository.findOne(id)執(zhí)行也很快,300ms左右,我覺得應(yīng)該是B實(shí)體類的問題,會(huì)不會(huì)是因?yàn)锽關(guān)聯(lián)A,但是A又關(guān)聯(lián)C,導(dǎo)致B里面有多重關(guān)聯(lián)??墒遣幻靼譮indOne為什么比findBy這種要慢那么多。求大神指教 你好,部分歷史信息中存在他們的對(duì)比描述
Spring Data JPA 之 getOne() 和 findOne() 的區(qū)別 簡(jiǎn)易版
spring-data-jpa中findOne與getOne的區(qū)別 詳細(xì)版
目前我在項(xiàng)目中用SpringBoot2.0與Java8時(shí),findOne其實(shí)已經(jīng)被修改了
現(xiàn)在findOne是將找到一個(gè)QueryByExampleExecutor接口中定義的方法,
最后通過接口SimpleJpaRepository的默認(rèn)實(shí)現(xiàn)來CrudRepository實(shí)現(xiàn)。
此方法是通過示例搜索查詢,不希望你將其作為替換。
實(shí)際上,具有相同行為的方法仍然存在于新API中,但方法名稱已更改。
它是從更名findOne()到findById()的CrudRepository接口:
Optional<T> findById(ID id);
你可以通過findById(id).get()來獲取具象化對(duì)象。
通常,當(dāng)您按ID查找實(shí)體時(shí),如果未檢索到該實(shí)體,則要返回該實(shí)體或進(jìn)行特定處理。
這里有兩個(gè)經(jīng)典的用例。
1)假設(shè)如果找不到實(shí)體,則要拋出異常,否則要返回它。
你可以寫:
return repository.findById(id)
.orElseThrow(() -> new NotFoundEntity(id));
2)假設(shè)您要根據(jù)是否找到實(shí)體來應(yīng)用不同的處理(無需拋出異常)。
你可以寫:
Optional<Foo> fooOptional = fooRepository.findById(id);
if (fooOptional.isPresent()){
Foo foo = fooOptional.get();
// processing with foo ...
}
else{
// alternative processing....
}北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。