java - 我们如何在 CrudRepository 中实现自定义查找方法以仅从数据库中获取特定列?

标签 java spring hibernate

我必须在我的存储库中执行 SQL 查询:

public interface UserRequestResponseRepository extends JpaRepository<UserRequestResponse, Integer> {
    //public static final String FIND_QUERY = "select user.u_httpstatus ,user.u_queryparam from UserRequestResponse user";
    public static final String FIND_QUERY = 
            "select new com.abc.datacollection.entity.UserRequestResponse(user.u_httpstatus ,user.u_queryparam) from UserRequestResponse user";
    @Query(value = FIND_QUERY)
    public List<UserProjection> getAllRequestResponseRecords();
}

其中 UserProjection 是我定义的投影:

public interface UserProjection {
    String getU_httpstatus();
    String getU_queryparam();
}

类 userRequestResponse 的字段比 u_httpstatus 和 u_queryparam 更多,但我只想在响应中包含这 2 个字段。

public @ResponseBody List<UserRequestResponse> getAllRequestResponseRecords() {
    return userRequestResponseRepository.findAll() ;
}

如何修改上面的代码 (findAll()) 以从我的自定义查询获取结果,而不是从默认的 CrudRepository findAll() (返回所有字段)中获取结果。

最佳答案

首先,您不需要添加 @Query 来使投影正常工作。只需将 UserProjection 作为存储库中方法的返回类型就足够了。有关此的更多信息 here

其次,您可以在存储库中将以下方法作为基于投影的 findAll 方法;

public List<UserProjection> findAllProjectedBy();

关于java - 我们如何在 CrudRepository 中实现自定义查找方法以仅从数据库中获取特定列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213716/

相关文章:

java - 单元测试失败 : java. lang.RuntimeException : Method getMainLooper in android. os.Looper 未模拟

Java 8 而不是简单的 java

java - 向发现服务器注册服务的正确方法

java - 如何在 spring 中覆盖 JndiObjectFactoryBean 并在 java 中设置解密密码

java - hibernate restrictions.in with and,怎么用?

java - Eclipse Maven 与 Jenkins 集成

java - 无法在 Android 中设置自定义对话框的宽度

java - 如何将 map 存储在Spring项目使用的.properties文件中?

java - 管理多个数据源的 session 时出现问题

java - JPA orphanRemoval = true 尝试更新而不是删除