在应用程序中使用Spring Data JPA时,您通常定义实体(@Entity),编写存储库接口(扩展了CrudRepository),并进行一些超出本问题范围的额外配置。
例如,
@Entity
public class Product {
// code removed for brevity
}
public interface ProductRepository extends CrudRepository<Product, Long> {
// code removed for brevity
}
现在,如果我有多个像上面这样的实体,并且需要设计一个服务API,比如searchByProductAndUserAndLocation(假设这三个都是数据库表),那么在Spring Data JPA我应该如何做呢?假设我也为数量/成本编写实体类。显然,我需要根据某些条件(使用外键)连接表,但我不清楚哪个存储库应该保存这样的查询,因为我觉得这里没有特定的ownerrepository/class。
此外,我可以通过ProductService、LocationService等公开数据,然后组合结果,但我不会使用数据库层连接或其他优化,最终影响应用程序性能。
我确信这是一个很常见的用例,一般的做法是什么?
提前道谢。
我相信根据方法的返回类型将方法分配给存储库是合理的,例如:
public interface ProductRepository extends CrudRepository<Product, Long> {
List<Product> searchByUserAndLocation(User user, Location location);
}