【发布时间】:2018-11-25 12:38:26
【问题描述】:
是否可以对 JPARepository 使用“findAll”来返回一个集合/投影列表? 示例:
@Entity
public class Login {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
@GenericGenerator(name = "native", strategy = "native")
private Integer id;
private String name;
private String pass;
(...)
}
public interface LoginProjection {
public String getName();
}
@Repository
public interface LoginRepository extends JpaRepository<Login, Long> {
Login findByName(String name);
@Query(value = "SELECT name FROM login", nativeQuery = true)
List<LoginProjection> findAllLoginProjection();
}
使用@Query 就可以了!但是无法使用
List<LoginProjection> findAll();
因为 LoginProjection 它没有扩展 T(登录)。
我在想是否可以为 findAll 提供一个“别名”,例如 findAllXYZ,它的作用与 findAll 相同。 使用过滤器也可以,但我不想使用它们:
List<LoginProjection> findAllByName(String name);
我的主要目标是这样的:
@Repository
public interface LoginRepository extends JpaRepository<Login, Long> {
Login findByName(String name);
List<Login> findAll();
List<LoginProjection> findAllLoginProjection();
}
这很简单,并且使用“零 @Query”
【问题讨论】:
-
列表
findAllProjectedBy(); -
您可能需要使用@Projection 注解来注解投影接口:@Projection(name = "name" , types = Login.class)
标签: java spring spring-data-jpa jpql