select 个不同的值使用 spring 个数据剩余
select distinct values using spring data rest
我正在使用 java 8 和 spring-data-rest 在我的数据上创建 API。
我有一辆table车(id, name, date...)
我正在尝试使用端点来检索不同的汽车名称。
这是我的存储库:
@RepositoryRestResource(path = "cars")
public interface CarRepository extends JpaRepository<Car, Long> {
//What i want to do
//@Query(value = "select distinct c.name as name from Car c")
@Query(value = "select distinct c from Car c")
List<Car> findDistinctName();
}
评论的查询不起作用,我有一个例外
java.lang.IllegalArgumentException: PersistentEntity must not be null!
显然这是 SDR 的正常行为。
我尝试了另一种解决方案,使用 Projections
@Projection(name = "name", types = {Car.class})
public interface CarName {
String getName();
}
但我无法获得不同的值,知道吗?
谢谢:)
如果你需要一个不同的汽车列表,你需要做的就是这样的查询方法:
public interface CarRepository extends JpaRepository<Car, Long> {
List<Car> findDistinctBy();
}
Spring Data JPA 支持存储库查询方法中的 Distinct 关键字以在要创建的查询上设置不同的标志。
我找到了一个(丑陋的)解决方法,使用 jpql :
@Query(value = "select c from Car C WHERE c.id IN (SELECT min(ca.id) FROM Car ca Group by ca.name)")
我认为您应该删除@Query 注释。
只是
List<Car> findDistinctName();
或 List<Car> findNameDistinct();
应该就足够了。
它会自动生成查询 select c.name from Car c
我正在使用 java 8 和 spring-data-rest 在我的数据上创建 API。
我有一辆table车(id, name, date...)
我正在尝试使用端点来检索不同的汽车名称。
这是我的存储库:
@RepositoryRestResource(path = "cars")
public interface CarRepository extends JpaRepository<Car, Long> {
//What i want to do
//@Query(value = "select distinct c.name as name from Car c")
@Query(value = "select distinct c from Car c")
List<Car> findDistinctName();
}
评论的查询不起作用,我有一个例外
java.lang.IllegalArgumentException: PersistentEntity must not be null!
显然这是 SDR 的正常行为。
我尝试了另一种解决方案,使用 Projections
@Projection(name = "name", types = {Car.class})
public interface CarName {
String getName();
}
但我无法获得不同的值,知道吗?
谢谢:)
如果你需要一个不同的汽车列表,你需要做的就是这样的查询方法:
public interface CarRepository extends JpaRepository<Car, Long> {
List<Car> findDistinctBy();
}
Spring Data JPA 支持存储库查询方法中的 Distinct 关键字以在要创建的查询上设置不同的标志。
我找到了一个(丑陋的)解决方法,使用 jpql :
@Query(value = "select c from Car C WHERE c.id IN (SELECT min(ca.id) FROM Car ca Group by ca.name)")
我认为您应该删除@Query 注释。
只是
List<Car> findDistinctName();
或 List<Car> findNameDistinct();
应该就足够了。
它会自动生成查询 select c.name from Car c