1

アプリケーションでSpringDataJPAを使用する場合、通常はエンティティ(@Entity)を定義し、リポジトリインターフェイス(CrudRepositoryを拡張する)を記述して、この質問の範囲外の追加の設定を行います。

例えば、

@Entity
public class Product {
    // code removed for brevity
}

public interface ProductRepository extends CrudRepository<Product, Long> {
    // code removed for brevity
}

上記のような複数のエンティティがあり、searchByProductAndUserAndLocationのようなサービスAPIを設計する必要がある場合(3つすべてがデータベーステーブルであるとしましょう)、SpringデータJPAでこれをどのように行う必要がありますか?数量/コストのエンティティクラスも作成するとします。明らかに、(外部キーを使用して)いくつかの基準でテーブルを結合する必要がありますが、ここには特定の所有者リポジトリ/クラスがないと感じているため、どのリポジトリがそのようなクエリを保持する必要があるかがわかりません。

また、ProductService、LocationServiceなどでデータを公開し、結果を組み合わせることができますが、データベースレイヤーの結合やその他の最適化を利用して、最終的にアプリケーションのパフォーマンスに影響を与えることはありません。

これは非常に一般的なユースケースであると確信していますが、これの一般的な方法は何ですか?

前もって感謝します。

4

1 に答える 1

3

メソッドの戻り値の型に応じて、メソッドをリポジトリに割り当てるのが合理的だと思います。

public interface ProductRepository extends CrudRepository<Product, Long> {
  List<Product> searchByUserAndLocation(User user, Location location); 
}
于 2012-08-11T05:01:24.473 に答える