如何在 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 中创建通用查询?的主要内容,如果未能解决你的问题,请参考以下文章