如何在 JPA 中创建通用查询?

Posted

技术标签:

【中文标题】如何在 JPA 中创建通用查询?【英文标题】:How to create a general query in JPA? 【发布时间】:2019-07-22 02:53:17 【问题描述】:

在我的数据库中的每个表中,我都有一个名为 table_id 的列。 为了获得这个值,我需要在每个存储库中创建一个方法,即 getTableId() ...。有没有一种方法我必须创建一次方法 getTableId 并从不同的类中调用它。我想到了像@Query(Select n.table_id from :myClass n) 这样的查询。

【问题讨论】:

你正在使用 Spring Data 你已经继承了一个方法 findOne(id) 所以使用它。 【参考方案1】:

根据您的问题,我假设您不想在所有存储库中使用 .findAll()、.findById() 并且只想使用一次,并且想编写如下查询。

public interface XXXRepository extends CrudRepository<XXX, Integer> 
@Query(value = "select * from ?1 where ...", nativeQuery = true)
List<XXX> findByXXX(String tableName, ...);

这里只能在where..后面使用查询参数,也就是说不能使用查询参数作为表名。

是的,如果您的实体中有@Table(name="tableName") 注释,您可以获得如下表名。

yourEntityClassName.class.getAnnotation(Table.class).name()

【讨论】:

【参考方案2】:

有一个传递表名的方法。注入必要的存储库。根据表名调用 findAll。您可以从结果中获取 id。

【讨论】:

对不起,我没有完全理解你!你能给我举个例子吗?

以上是关于如何在 JPA 中创建通用查询?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA 以编程方式在 Oracle 中创建序列

如何在通用相册中创建视图(通用)项目 - 网址方向问题

如何在 PHP 中创建通用 DAO 接口?

如何在 Hibernate 中创建多态/通用多对多关系?

我如何在Java中创建通用方法?

如何在 ASP.Net 中创建必须是通用的数据访问层?