Spring Data JDBC支持实体之间的联接吗?

时间:2018-10-09 04:41:25

标签: java spring spring-boot spring-data-jpa spring-data-jdbc

正如我在文档中阅读的那样,Spring Data JDBC支持像Spring Data JPA这样的查询创建

例如: findByProperty(Property property)

我的问题:

Spring Data JDBC是否支持以下情况:我们创建查询并使用两个(或多个)实体的属性将它们连接起来以像Spring Data JPA中那样查找结果?

示例:

@Entity
class Person {
  private final @Id Long id;
  private final Car car;
}

@Entity
class Car {
  private final @Id Long id;
  private String color;
}

interface PersonRepository extends CrudRepository<Person, Long> {
  List<Person> findByCarColor(Color red);
}

interface CarRepository extends CrudRepository<Car, Long> {
}

我想找到所有拥有至少一辆红色轿车的人。那种方法能给出正确的输出吗?

1 个答案:

答案 0 :(得分:5)

恐怕您误读了文档。

Spring Data JDBC的1.0版本不支持查询派生。 它肯定会在不久的将来添加。

误解源于所有的Spring Data文档都以概括性的部分开头,概述了原则上可用于模块的功能。 这部分对于所有模块都是相同的。 然后是模块的特定部分,描述了实际功能。 不幸的是,不支持查询派生的事实只能从模块特定部分未提及的事实中推论得出。

此功能到来后,很可能将支持跨实体的查询,但至少在开始时仅跨相同聚合的实体进行查询。

聚合的概念对于Spring Data JDBC极为重要,这就是为什么我强烈建议阅读blog article about this concept and its ramifications for Spring Data JDBC的原因。