将变量绑定到本机查询时出错。EclipseLink(JPA2.1)
String sql = "ALTER ROLE ?1 WITH ENCRYPTED PASSWORD 'xxx'"; //(not working)
//String sql = "ALTER ROLE ? WITH ENCRYPTED PASSWORD 'xxx'"; (not working)
Query query = em.createNativeQuery(sql);
String text = txtUsername.getText();
query.setParameter(1, text);
em.getTransaction().begin();
int executeUpdate = query.executeUpdate();
em.getTransaction().commit();
内部异常:org.PostgreSQL.util.psqlException:错误:“$1”位置或附近的语法错误:12错误代码:0线程“awt-eventqueue-0”javax.Persistence.persistenceException:Exception[EclipseLink-4002](Eclipse Persistence Services-2.5.2.v20140319-9ad6abd):org.Eclipse.Persistence.exceptions.databaseException调用:ALTER ROLE?使用加密密码'xxx'bind=>[1 parameter bound]查询:DataModifyQuery(sql=“ALTER ROLE?WITH ENCRYPTED PASSWORD'xxx'”)内部异常:org.PostgreSQL.util.psqlexception:错误:语法错误位于或靠近“$1”位置:12错误代码:0调用:ALTER ROLE?使用加密密码'XXX'
在此查询中不能参数化用户名和密码。另一种方法是编写一个存储的函数并调用该函数。我在网上找到的一个可以修改的商店功能是:
CREATE OR REPLACE FUNCTION save_user(
in_username text,
in_password TEXT) returns bool
SET datestyle = 'ISO, YMD' -- needed due to legacy code regarding datestyles
AS $$
DECLARE
stmt text;
t_is_role bool;
BEGIN
-- WARNING TO PROGRAMMERS: This function runs as the definer and runs
-- utility statements via EXECUTE.
-- PLEASE BE VERY CAREFUL ABOUT SQL-INJECTION INSIDE THIS FUNCTION.
PERFORM rolname FROM pg_roles WHERE rolname = in_username;
t_is_role := found;
IF t_is_role is true and t_is_user is false and in_pls_import is false THEN
RAISE EXCEPTION 'Duplicate user';
END IF;
if t_is_role and in_password is not null then
execute 'ALTER USER ' || quote_ident( in_username ) ||
' WITH ENCRYPTED PASSWORD ' || quote_literal (in_password)
|| $e$ valid until $e$ ||
quote_literal(now() + '1 day'::interval);
elsif t_is_role is false THEN
-- create an actual user
execute 'CREATE USER ' || quote_ident( in_username ) ||
' WITH ENCRYPTED PASSWORD ' || quote_literal (in_password)
|| $e$ valid until $e$ || quote_literal(now() + '1 day'::interval);
END IF;
return true;
END;
$$ language 'plpgsql' SECURITY DEFINER;
存储库接口: 当我运行调用本机查询的endpoint时,我得到异常: 无法将值“{0,198}”从类型[java.lang.Object[]]转换为类型[com.representation.representation];嵌套异常为org.springframework.core.convert.converterNotFoundException:未找到能够从类型[java.math.BigD
有两个实体Person和Address。人与地址之间存在1:M关系。(假定某人有临时和永久地址)。 Person类的关键属性是: < li>personId(pk) < li >性别 地址类的主要属性是: 地址id(pk) 人(fk) 性别 以下是Person和Address类的描述符代码片段: 以下是用于生成动态查询的代码片段: 运行此程序时,根据日志生成的查询: 如何编写表达式在第一个join
我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。 运行查询时, 1如果我把实体名称返回表未找到。 2如果我将表名放在查询中,则查询的验证失败。 问题是 如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHAR
当使用jpa本机查询 事务传播是我们正在使用的正确jpa的唯一特性吗? 在我的意见中,我就像使用普通的旧jdbc pluc jpa事务传播 我正在阅读PRO JPA一书,根据我的理解 当我们使用JPA本机查询获取一组标量值时(与我们使用jdbc的方式很相似),实际上没有托管实体和持久性上下文的概念。当我们通过本机查询检索实体时,情况会发生变化。