الفرق بين تعريف الاستعلامات في واجهة المستودع أو فئة الكيان?
-
20-12-2019 - |
سؤال
آسف إذا كان هذا هو سؤال نوبي / غبي جدا ، ولكن كنت أتساءل عما إذا كان هناك أي فرق ، إلى جانب التنفيذ ، بين تحديد استعلام في المستودع:
public interface EmployeeRepository<Employee, Integer> {
@Query("select e from Employee e where e.name like :name")
public List<Employee> findByName(@Param("name") String name);
}
وتحديد استعلام في الكيان:
@Entity
@NamedQuery(name="Employee.findByName", query="select e from Employee e where e.name like :name")
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
//...
}
مثل هل هناك مزايا / عيوب لأي واحد?
المحلول
بشكل عام ، نوصي بتحديد الاستعلامات في واجهة المستودع لسبب بسيط للغاية:إنه أقرب من الناحية المفاهيمية إلى تنفيذ الاستعلام.أيضا, @Query
لديه عدد قليل من الخيارات المتقدمة عندما يتعلق الأمر الاستعلامات الإضافية التي على سبيل المثال.تحتاج إلى تشغيل لتنفيذ ترقيم الصفحات.
ومع ذلك ، إذا كنت ترغب في إعادة استخدام تعريف الاستعلام على طرق استعلام متعددة ، فإن استخدام استعلام مسمى لا يزال خيارا معقولا.
أهم جانب للمنظمة البحرية الدولية هو الاتساق إما بين الفريق أو على الأقل لكل الريبو.إذا كنت تبدأ مع الاستعلامات المسماة ، لا مزجها مع @Query
قد تؤدي التعريفات إلى إرباك المطورين أو على الأقل تجعل من الصعب فهم ما يحدث.