【问题标题】:Using @Query witouht extends from JpaRepository使用 @Query 与 JpaRepository 扩展
【发布时间】:2018-06-21 12:36:16
【问题描述】:

我正在尝试使用@Query 执行系统请求。所以,我不必无缘无故地扩展 JpaRepository 并创建实体。

我收到此错误:

Field myDAO in myPackage.impl.MyService required a bean of type 'myPackage.dao.MyDAO' that could not be found.

在 MyService,我自动装配了 MyDAO。

public class MyService implements IMyService {
    @Autowired
    private MyDAO myDAO;
    @Override
    public List<String> getAllTablesName() {
    return  myDAO.getAllTablesName();
    }
}

我尝试添加@Repository,但没有任何改变

@Repository
public interface MyService{

    @Query(value ="SHOW TABLES FROM :tableName",nativeQuery = true)
    public List<String> getAllTablesName(@Param("tableName") String tableName);
}

我该如何解决这个问题?

【问题讨论】:

  • 我不完全确定“SHOW”命令(以及它是否可以通过 JDBC 工作),但作为表的绑定变量肯定不会工作。

标签: spring-boot spring-data-jpa


【解决方案1】:

虽然您不必扩展 JpaRepository,但您至少必须扩展 Repository

如果你真的没有实体,你可能不应该首先使用 JPA,因为 JPA 就是将实体映射到数据库表。

如果您只是想执行语句,更合适的可能是一个带有注入 JdbcTemplateNamedParameterJdbcTemplate 的简单类。

【讨论】:

  • JdbcTemplateNamedParameterJdbcTemplate 需要 ResultSetExtractor 来映射查询结果。这是同一个问题。我不能使用@Repository 并将包名称添加到@EnableJpaRepositories。它不将 dao 识别为 bean
  • 您不需要ResultSetExtractor,您可以使用queryForList(java.lang.String sql, java.lang.Class&lt;T&gt; elementType) 之类的方法。我不明白第二句话:生成的 bean 不是 Spring Data Repository。您需要扩展 Repository 以获取您似乎不想要的实体。
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 2015-08-07
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2019-10-19
相关资源
最近更新 更多