gpt4 book ai didi

java - 如何获取命名查询的jpql?

转载 作者:行者123 更新时间:2023-11-30 06:11:42 25 4
gpt4 key购买 nike

假设有以下定义:

@Entity
@NamedQueries({
@NamedQuery(name = "name1", query = "SELECT n FROM SomeEntity n where n.name= :name"),
@NamedQuery(name = "name2", query = "SELECT n FROM SomeEntity n where n.name <> :name")
})
public class SomeEntity ......

如何以编程方式获取命名查询的定义?

例如,下面的代码片段应该打印 name1 查询的定义,我不知道如何在代码中获取此定义:

String queryString = ????????.getSqlOfNamedQuery("name1");
// the below line should print: SELECT n FROM SomeEntity n where n.name= :name
System.out.println( queryString );

最佳答案

您可以使用unwrap方法并为其提供供应商特定的类。我在old DZone article中看到了这个。我已经测试了 EclipseLink 版本,它对我有用:

Query query = entityManager.createQuery("....");

对于 EclipseLink:

String sqlString = query.unwrap(JpaQuery.class).getDatabaseQuery().getSQLString();

对于 hibernate :

String sqlString = query.unwrap(org.hibernate.Query.class).getQueryString();

您还可以检查数据库日志(即 /var/log/postgres/postgres.log),但您可能有其他需要采用编程方法的要求。

关于java - 如何获取命名查询的jpql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com