- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的案例中,为什么命名或位置查询参数不能与 NHibernate 一起使用?
考虑以下陈述为真:
On Oracle database X and Y version 11.2.0.3.0 the role "MyRole" exists identified by "MyPassword" and is granted to the user I am connected as.
这是一些代码:
public void SetRole(string roleName, string rolePassword)
{
if (HasRoleBeenSet) return;
try
{
session.CreateSQLQuery("SET ROLE ? IDENTIFIED BY ?")
.SetString(0, roleName)
.SetString(1, rolePassword)
.ExecuteUpdate();
HasRoleBeenSet = true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
SetRole("MyRole", "MyPassword");
抛出以下异常:
NHibernate.Exceptions.GenericADOException: could not execute native bulk manipulation query: SET ROLE ? IDENTIFIED BY ? [SQL: SET ROLE :p0 IDENTIFIED BY :p1] ---> System.Data.OracleClient.OracleException: ORA-01937: missing or invalid role name
当我使用 Toad 套件中包含的 SQLMonitor 时,发送到数据库的 SQL 看起来像这样 SET ROLE ? IDENTIFIED BY ?
错误 Error occurred: [1937] (ORA-01937: missing or invalid role name)
showing under.
当我查看 FNH 自己生成的带有参数的查询时,它们看起来像这样:
SchemaName.errorHandler.logError(:v0);
:1=['The error message']
但当我使用 CreateSQLQuery()
好的,下一个代码示例是这样的:
...
session.CreateSQLQuery("SET ROLE :roleName IDENTIFIED BY :rolePassword")
.SetString("roleName", roleName)
.SetString("rolePassword", rolePassword)
.ExecuteUpdate();
...
输出以下错误(同样的错误):
NHibernate.Exceptions.GenericADOException: could not execute native bulk manipulation query: SET ROLE :roleName IDENTIFIED BY :rolePassword [SQL: SET ROLE :p0 IDENTIFIED BY :p1] ---> System.Data.OracleClient.OracleException: ORA-01937: missing or invalid role name
第三个代码示例:
...
session.CreateSQLQuery(string.Format("SET ROLE {0} IDENTIFIED BY {1}",
roleName,
rolePassword))
.ExecuteUpdate();
...
在 Oracle 数据库 X 上,这很有效,在 Oracle 数据库 Y 上,这不是很好,并给我这个错误:
NHibernate.Exceptions.GenericADOException: could not execute native bulk manipulation query: SET ROLE MyRole IDENTIFIED BY MyPassword [SQL: SET ROLE MyRole IDENTIFIED BY MyPassword] ---> System.Data.OracleClient.OracleException: ORA-00933: SQL command not properly ended
我尝试在语句末尾添加一个分号 ;
但这会导致 invalid character
错误。
如果我像这样在密码周围添加双引号,它突然也适用于 Oracle 数据库 Y
...
session.CreateSQLQuery(string.Format("SET ROLE {0} IDENTIFIED BY \"{1}\"",
roleName,
rolePassword))
.ExecuteUpdate();
...
问题是这不是一个很好的解决方案,因为 FNH 现在会在记录的异常中泄露密码。我不知道这里有什么问题,这里没有明确的问题,因为我不知道该问什么,然后尖叫寻求帮助,希望有人能对此有所了解。
在评论中进行了一些讨论后,我尝试了以下方法:
...
session.CreateSQLQuery(string.Format("SET ROLE {0} IDENTIFIED BY :rolePassword",
roleName))
.SetString("rolePassword", rolePassword)
.ExecuteUpdate();
...
我尝试同时使用 :named 和 ? (位置)参数,带单引号、双引号,似乎没有什么办法。
这段代码抛出著名的ORA-00933: SQL command not properly ended
错误
最佳答案
尝试使用 .SetParameter() 而不是 SetString()。我目前正在使用这样的东西并且它有效:
var cases = Session.CreateSQLQuery(sql)
.SetParameter("someID",thisIsMyValue)
.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<SomeDTO>())
.List<SomeDTO>();
SQL 看起来像这样:
var sql = "SELECT fieldA, fieldB FROM myTable WHERE myTable.ID = :someID"
关于oracle - 带有命名参数问题的 NHibernate CreateSQLQuery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766968/
当我尝试使用 CreateSqlQuery 查询表并将其转换为包含公式属性的实体时,我得到以下 Adoexception。 “值不能为空。 参数名称:fieldName" 首先,是否可以在具有公式映射
我有一个简单的方法可以... Session.CreateSQLQuery(syntax).List(); 问题是,当我针对征用链接服务器连接的存储过程执行此操作时,我收到以下错误... 无法执行该操
我正在尝试使用 NH CreateSQLQuery 方法获取一些数据,例如 IList LCollection = sess.CreateSQLQuery(@"select * from some_s
使用 CreateSqlQuery 时,是否可以检索返回的列名的有序列表? 使用 .List 只返回对象值的列表,而不是列别名。 最佳答案 如果您申请 IResultTransformer通过 Set
在我的例子中,为什么命名或位置查询参数不能与 NHibernate 一起使用? 认为以下陈述是正确的: On Oracle database X and Y version 11.2.0.3.0 th
Query query=getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(
在我的案例中,为什么命名或位置查询参数不能与 NHibernate 一起使用? 考虑以下陈述为真: On Oracle database X and Y version 11.2.0.3.0 the
我正在尝试运行这个: .. String modelTableName = (model == TableModelType.RING) ? "RING_PLAYERS" : "TOURNY_PLAY
我需要在Java领域编写hibernate查询(createSQLquery)我有查询,但我有点不知道如何为我的查询创建条件。 基本上我必须将常规 where 子句转移到 hibernate .add
我有两个项目,maven。 A - 休息应用,使用 hibernate 5.2.16.FINAL,包括 B(不包括其 hibernate) B - 库,使用 hibernate 4.3.9 项目 A
我有一个像这样的 mysql 查询来获取行号。 set @rank = 0; select @rank := @rank + 1 as rank,id,name from test 在 hiberna
在 hibernate 状态下,我编写了一个搜索表单 win Swing。为此目的: 我的实体 A 有 10 个字段,但在这种搜索的情况下,我只需要同一实体的 5 个字段/列。 我想使用 SQL 原生
我有一个项目正在从一个共享的 mysql 数据库中读取数据。有一个来自 session 的大帐户对象(太大,但那是另一回事)。 问题是这个对象有一个由同一台机器上的不同进程借记的余额字段。因此,用户看
我正在尝试按照以下方式获取 sql 计数 "select c1.id, count(c2.*) " + "from Category c1 "
这是我正在尝试处理的较大查询的较小版本。当我运行查询时,出现以下错误。我已尝试尽可能多地删除查询以尝试找到有罪的列,但没有取得任何成功。我正在使用 Spring 3.2.1、Hibernate 3.6
我对 Hibernate/Java (JSF 2.0) 很陌生,我正在尝试调用自定义查询并将结果读入我创建的登录对象中。 Logins 有两个 setter 函数,setLoginDate(Date
我的应用程序存在内存泄漏问题,因此我使用 JProfiler 来查找原因。我发现问题是在使用session.createSQLQuery()时Hibernate中的 native sql引起的。 还有
在 spring hibernatetemplate 的 createSQLQuery 中,我可以使用 where in(1,2,3,4,5,6....) 的语句是否有任何限制 ()? 最佳答案 如上
我需要获取以下查询的结果,但出现类型转换异常。请大家帮忙! SELECT COUNT(*) FROM ( SELECT DISTINCT a.PROPSTAT_CODE,a.PROPSTAT_DESC
hibernate 手册是这样说的: String sql = "SELECT ID as {c.id}, NAME as {c.name}, " + "BIRTHDATE as {c.birt
我是一名优秀的程序员,十分优秀!