是否可以使用“findAll”为JPARepository返回一个Collection / List of Projections? 例如:
@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”
答案 0 :(得分:10)
并向存储库添加一个方法:
List<LoginProjection> findAllProjectedBy();
答案 1 :(得分:1)
我认为您没有使用Spring Data REST,因此@Projection
在这里无济于事。 @ pavel-molchanov显示了一种表达投影的形式,另一种形式是:
List<LoginProjection> findBy();
如果您有多个投影,则可以避免使用dynamic projections在存储库中为每个投影创建一个方法,例如这个:
<T> List<T> findBy(Class<T> projection);
// usage e.g.
... = findBy(LoginProjection.class);
... = findBy(UserSummaryProjection.class);