亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Data JPA-如何通過方法名稱組合多個And和Or

Spring Data JPA-如何通過方法名稱組合多個And和Or

藍山帝景 2019-12-06 11:06:08
我正在嘗試遷移該應用程序。我正在從Hibernate到Spring Data Jpa工作。盡管spring data jpa提供了用于構建查詢的簡單方法,但我仍然堅持創建同時使用And和的查詢方法Or operator。方法名稱- findByPlan_PlanTypeInAndSetupStepIsNullOrStepupStepIs(...)當它轉換為查詢時,前兩個表達式將合并并以形式執行[(exp1 and exp2) or (exp3)]。而要求是](exp1) and (exp2 or exp3)]。任何人都可以讓我知道是否可以通過以下方式實現 Spring data jpa?
查看完整描述

3 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

同意奧利弗關于長且不可讀的方法名,但是盡管如此,并且為了論證,您可以通過使用等效性來獲得所需的結果


A /\ (B \/ C) <=> (A /\ B) \/ (A /\ C)

A and (B or C) <=> (A and B) or (A and C)

因此,在您的情況下,它應如下所示:


findByPlan_PlanTypeInAndSetupStepIsNullOrPlan_PlanTypeInAndStepupStepIs(...)


查看完整回答
反對 回復 2019-12-06
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

選項1:您可以使用命名查詢(請參閱使用JPA命名查詢):


@Entity

@NamedQuery(name = "User.findByEmailAddress",

  query = "select u from User u where u.emailAddress = ?1")

public class User {


}


public interface UserRepository extends JpaRepository<User, Long> {


   User findByEmailAddress(String emailAddress);

}

Option2:用于@Query編寫您的自定義查詢(請參閱使用@Query)


public interface UserRepository extends JpaRepository<User, Long> {


   @Query("select u from User u where u.emailAddress = ?1")

   User findByEmailAddress(String emailAddress);

}


查看完整回答
反對 回復 2019-12-06
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

當前是不可能的,將來也不會。我認為即使有可能,對于更復雜的查詢,您也不想人為地將所有查詢復雜性壓縮為方法名稱。不僅因為難以理解查詢中實際發生的事情,而且還因為從客戶端代碼的角度出發:您想要使用可表達的方法名稱,在簡單的情況下,findByUsername(…)您可以使用它來創建查詢。

對于更復雜的內容,您只需將查詢復雜度提高到調用代碼中,建議改為使用可讀的方法名稱,該名稱以語義方式表達查詢的作用,并使用@Query,命名查詢等將查詢復雜度保留在手動聲明的查詢中。


查看完整回答
反對 回復 2019-12-06
  • 3 回答
  • 0 關注
  • 3553 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號