Khi tạo truy vấn được đặt tên trong JPA, có một phương pháp hay nhất được chấp nhận cho tên của các truy vấn này (ví dụ: EntityName.allActive
hoặc findAllActiveFoos
v.v.) và cũng là tốt để khai báo các truy vấn được đặt tên này trong các lớp thực thể họ truy vấn hoặc tất cả cùng nhau trong một lớp tiện ích?NamedQuery: Thực hành tốt nhất
Trả lời
Không, không có thực hành tốt nhất được chấp nhận rộng rãi bao gồm mọi trường hợp phức tạp. Nói chung, không có quá nhiều hướng dẫn về phong cách cho JPA. Những gì dường như thường được chấp nhận, và nói chung được sử dụng trong sách là tốt, là để bắt đầu truy vấn với tên của thực thể.
Tôi sẽ đi cho EntityName (để đảm bảo tên duy nhất trong đơn vị kiên trì) kết hợp với hoạt động và đối số.
- Person.findByAge
- Person.findByAgeAndFirstName
- Person.removeByFirstName
- Person.updateSalaryIfYearBornBefore
Cũng giống như một ghi chú, đặc điểm kỹ thuật sử dụng with
thay vì by
trong các ví dụ, và không truy vấn tiền tố có tên của thực thể. Nhưng đó là đặc điểm của khóa học, không phải là hướng dẫn về phong cách.
Tôi thấy tốt khi khai báo hằng số cho các tên truy vấn này và sau đó sử dụng các hằng số này trong cả hai @ NamedQuery.name và em.createNamedQuery.
Vì @NamedQuery, @NamedNativeQuery và @NamedQueries chỉ có thể được áp dụng cho siêu lớp được ánh xạ hoặc thực thể, bạn không thể định vị chúng vào lớp tiện ích.
Tôi tin rằng 'Entity.camelCaseWhatItDoesName' khá đủ điều kiện là phương pháp hay nhất. Trong các dự án trước đây, một số khách hàng đã áp dụng phong cách này. – Kawu
Mặc dù dường như không phải là thực tiễn tốt nhất được chấp nhận trên toàn cầu, sách "Pro JPA 2" của Mike Keith và Merrick Shincariol đề xuất chính xác những gì Mikko đã nói, ví dụ: nếu bạn có một truy vấn để tìm tất cả các nhân viên thì hãy gọi nó là "Employee.findAll".
Ito nơi để khai báo này, một lần nữa không có thực hành tốt nhất thực sự từ những gì tôi có thể nhìn thấy. Chúng dường như có xu hướng ưu tiên khai báo chúng trên thực thể hơn là tất cả trong một lớp lớn (như một lớp cơ sở MappedSuperclass mà từ đó tất cả các thực thể của bạn mở rộng) vì nó sẽ nhanh chóng trở thành nguyên khối và có thể hơi khó duy trì. Một tùy chọn khác là khai báo chúng trong một tệp XML riêng biệt, không phải là tôi sẽ đề xuất điều đó. Cá nhân tôi thích cách tiếp cận mà họ được tuyên bố trên thực thể mà họ có liên quan đến. Tôi cũng đồng ý với đề xuất của Miko để sử dụng hằng số cho tên, bạn chỉ có thể xác định tất cả các hằng số này trong một lớp riêng biệt.
như là một sang một bên, một thực hành tốt nhất là rất khuyến khích cho các truy vấn được đặt tên là sử dụng các tham số được đặt tên như trái ngược với các tham số vị trí. Điều này làm cho các truy vấn dễ dàng hơn nhiều để làm việc với. – brent777
- 1. htaccess thực hành tốt nhất
- 2. cmake thực hành tốt nhất
- 3. release Vs nil - Thực hành tốt nhất
- 4. NuGet và TFS thực hành tốt nhất
- 5. Thực hành tốt nhất của Redmine
- 6. Pattern Repository Thực hành tốt nhất
- 7. Thực hành SQLite tốt nhất trên iPhone
- 8. Thực hành tốt nhất về mảnh vỡ
- 9. HttpRuntime.Các thực hành tốt nhất của Apache
- 10. Hướng dẫn thực hành tốt nhất: Swing
- 11. Dependency Injection Thực hành tốt nhất
- 12. Thực hành tốt nhất D3 và TDD
- 13. Thực hành tốt nhất C++ cho hằng
- 14. Thực hành tốt nhất của Windows Registry
- 15. Thực hành tốt nhất cho mẫu DAO?
- 16. Thực hành tốt nhất C# và Excel
- 17. CSS Outline thực hành tốt nhất
- 18. theo dõi Bug thực hành tốt nhất
- 19. Thực hành tốt nhất để viết bookmarklets
- 20. Hibernate Performance Thực hành tốt nhất?
- 21. Ghi đè Ext.data.Connection - Thực hành tốt nhất
- 22. Bố cục SVN - thực hành tốt nhất
- 23. Thực hành tốt nhất cho tệp typedefs
- 24. một ví dụ tốt về thực hành tốt nhất ant
- 25. Thực hành tốt nhất hợp nhất một phần SVN
- 26. C#: nối chuỗi dễ đọc nhất. thực hành tốt nhất
- 27. Thực thể tốt nhất và thực hành tốt nhất của WPF
- 28. Thực hành tốt nhất khi không thực hiện IValueConvert.ConvertBack
- 29. Thực hành tốt nhất về xác thực API Web
- 30. Thực hành tốt nhất copyWithZone khi thực hiện:
Câu trả lời liên quan: http://stackoverflow.com/a/4948333/1725096 –