java - Spring jpa data-كيفية الجمع بين متعددة وأو من خلال اسم الأسلوب




spring-data-jpa spring-data (3)

أحاول ترحيل التطبيق. أنا أعمل على من السبات إلى الربيع البيانات Jpa .

على الرغم من أن البيانات الربيعية jpa تقدم طرقًا بسيطة لبناء الاستعلام ، إلا أنني علقت في إنشاء طريقة استعلام تستخدم كل من Or operator And و.

MethodName - findByPlan_PlanTypeInAndSetupStepIsNullOrStepupStepIs(...)

عندما يتم تحويله إلى الاستعلام ، يتم الجمع بين التعبيرات الأولى والثانية ويتم [(exp1 and exp2) or (exp3)] كـ [(exp1 and exp2) or (exp3)] .

حيث أن المطلوب هو ](exp1) and (exp2 or exp3)] .

هل يمكن لأي شخص أن يُعلمني إذا كان هذا ممكنًا من خلال Spring data jpa?


اتفق مع Oliver على أسماء الطرق الطويلة وغير القابلة للقراءة ، ولكن مع ذلك ومن أجل الوسيطة ، يمكنك تحقيق النتيجة المرجوة باستخدام المعادلة

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

لذلك في حالتك ، يجب أن تبدو مثل هذا:

findByPlan_PlanTypeInAndSetupStepIsNullOrPlan_PlanTypeInAndStepupStepIs(...)

استخدام شيء مثل

findByFirstElementAndCriteriaOrSecondElementAndCriteria

يشبه (الأول والشرط) أو (الثاني والشرط) -> الشرط & (الأول أو الثاني)


الخيار الأول: يمكنك استخدام الاستعلامات المسماة (انظر استخدام استعلامات 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);
}

@Query : استخدم @Query لكتابة استفساراتك المخصصة (انظر استخدامQuery )

public interface UserRepository extends JpaRepository<User, Long> {

   @Query("select u from User u where u.emailAddress = ?1")
   User findByEmailAddress(String emailAddress);
}




spring-data