java - Spring JPA : Using multiple projection on same query interface

标签 java spring jpa

我正在尝试使用 Spring JPA 的投影从查询结果中过滤掉不必要的数据。但是,我有多个投影需要在同一个接口(interface)方法上使用。

问题是,我正在尝试使用不同的返回对象从同一方法查询数据,但 java 不允许这样做。

查询是由 JPA 根据方法名称自动生成的,因此我无法更改方法名称。

除了创建一个新界面之外,还有其他选择吗,因为我认为这既麻烦又没必要

这是我正在尝试做的示例代码。

Auto-Generated Query

public interface UserRepository extends CrudRepository<UserAccount, Long> {

    AuthenticateProjection getByUsername(String username);

    UserDetailsProjection getByUsername(String username);

}

Projections

public interface AuthenticateProjection {

    @Value("#{target.username}")
    String getUsername();

    @Value("#{target.credentail.token}")
    String getHashPassword();
}

public interface UserDetailsProjection {

    @Value("#{target.username}")
    String getUsername();

    @Value("#{target.firstname}")
    String getFirstName();

    @Value("#{target.lastname}")
    String getLastName();
}

最佳答案

所以我设法弄清楚了如何在单个查询中使用多个投影。

<T> T getByUsername(String username, Class<T> projection)

这允许方法调用者指定要应用于查询的投影类型。

为了进一步改进这一点,使其不易出错,我制作了一个空白界面,投影必须扩展该界面才能将类插入到参数中。

public interface JPAProjection {
}

public interface UserRepository extends CrudRepository<UserAccount, Long> {
    <T extends JPAProjection > T getByUsername(String username, Class<? extends JPAProjection> projection);
}

Projection Interface

public interface UserDetailsProjection extends JPAProjection{
    @Value("#{target.username}")
    String getUsername();

    @Value("#{target.firstname}")
    String getFirstname();

    @Value("#{target.lastname}")
    String getLastname();
}

然后我可以调用查询方法

getByUsername("...", UserDetailsProjection.class)

关于java - Spring JPA : Using multiple projection on same query interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43352967/

相关文章:

java - 对于 Java 中的一些基本数学函数有一个初学者问题。我做错了什么吗?

java - Spring Hibernate-JPA 使用基于 Java 的配置 org.springframework.beans.factory.NoSuchBeanDefinitionException

java - 如何在 JPA 的两列上运行像 SUM 这样的聚合函数并显示它们的结果?

java - JPA 实体身份和脏检查

java - 鼠标悬停 - libgdx

java - 无法从浏览器读取 Cookie

java - 在比较 Java 中的两个原语和两个对象时,== 实际上是相同还是不同?

Java - 如何从 Java 类引用资源文件

java - 如何将属性值保留在 session 范围内?

spring - 单个事务中的多个 Spring Data JPA 存储库