リポジトリインタフェースまたはエンティティクラスのクエリの定義の違いは?
-
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
は、それがその追加のクエリに関していくつかの高度なオプションを持っています。ページネーションを実装するためにトリガーされる必要があります。
しかし、指定された照会を使用して、クエリ定義を複数の照会メソッドで再利用したい場合は、まだ妥当なオプションです。
最も重要なアスペクトIMOは、チーム間または少なくともレポーの間で一貫性があります。名前付きクエリで起動した場合は、@Query
定義でそれらを混同しないでください。これにより、開発者を混同したり、少なくとも何が起こっているのか理解したりするのを難しくします。
所属していません StackOverflow