- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我正在尝试处理的较大查询的较小版本。当我运行查询时,出现以下错误。我已尝试尽可能多地删除查询以尝试找到有罪的列,但没有取得任何成功。我正在使用 Spring 3.2.1、Hibernate 3.6 和 Oracle 11g
Caused by: java.sql.SQLException: Invalid column name
at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3711)
at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2763)
at oracle.jdbc.driver.OracleResultSet.getBigDecimal(OracleResultSet.java:368)
at org.hibernate.type.descriptor.sql.DecimalTypeDescriptor$2.doExtract(DecimalTypeDescriptor.java:62)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
查询:
String query = "SELECT d.ID as {d.id}, d.DETAIL_ORDER as {d.detailOrder}, g.ID as {g.id}, g.NAME as {g.name} " +
"FROM EVAL_MASTER_EVAL_DETAIL d " +
"JOIN EVAL_QUESTION_GROUP g ON d.GROUP_ID = g.ID " +
"WHERE d.ACTIVE = 'Y' " +
"AND d.MASTER_EVAL_ID = :evalId" +
" ORDER BY d.DETAIL_ORDER ASC";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class)
.addEntity("g", EvalQuestionGroup.class).setParameter("evalId", evalId).list();
生成的 Hibernate 查询:
Hibernate: SELECT d.ID as ID29_0_, d.DETAIL_ORDER as DETAIL5_29_0_, g.ID as ID34_1_, g.NAME as NAME34_1_ FROM EVAL_MASTER_EVAL_DETAIL d JOIN EVAL_QUESTION_GROUP g ON d.GROUP_ID = g.ID WHERE d.ACTIVE = 'Y' AND d.MASTER_EVAL_ID = ? ORDER BY d.DETAIL_ORDER ASC
映射(验证名称)
<hibernate-mapping>
<class name="org.anes.surveys.domain.EvalMasterEvalDetail" table="EVAL_MASTER_EVAL_DETAIL">
<id name="id" type="big_decimal">
<column name="ID" precision="22" scale="0" />
<generator class="sequence-identity" >
<param name="sequence">EVAL_MASTER_EVAL_DETAIL_SEQ</param>
</generator>
</id>
<many-to-one name="evalQuestionGroup" class="org.anes.surveys.domain.EvalQuestionGroup" fetch="select">
<column name="GROUP_ID" precision="22" scale="0" />
</many-to-one>
<many-to-one name="evalMasterEvaluation" class="org.anes.surveys.domain.EvalMasterEvaluation" fetch="select">
<column name="MASTER_EVAL_ID" precision="22" scale="0" not-null="true" />
</many-to-one>
<property name="detailOrder" type="big_decimal">
<column name="DETAIL_ORDER" precision="22" scale="0" not-null="true" />
</property>
<property name="active" type="string">
<column name="ACTIVE" length="1" not-null="true" />
</property>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="org.anes.surveys.domain.EvalQuestionGroup" table="EVAL_QUESTION_GROUP">
<id name="id" type="big_decimal">
<column name="ID" precision="22" scale="0" />
<generator class="sequence-identity" >
<param name="sequence">EVAL_QUESTION_GROUP_SEQ</param>
</generator>
</id>
<property name="name" type="string">
<column name="NAME" not-null="true" />
</property>
<set name="evalMasterEvalDetails" table="EVAL_MASTER_EVAL_DETAIL" inverse="true" lazy="true" fetch="select">
<key>
<column name="GROUP_ID" precision="22" scale="0" />
</key>
<one-to-many class="org.anes.surveys.domain.EvalMasterEvalDetail" />
</set>
</class>
</hibernate-mapping>
编辑:尝试了以下但仍然出现无效列错误。 ACTIVE & d.active 是字符串。
String query = "SELECT ACTIVE as {d.active} " +
"FROM EVAL_MASTER_EVAL_DETAIL";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class).list();
String query = "SELECT d.ID " +
"FROM EVAL_MASTER_EVAL_DETAIL d ";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class).list();
String query = "SELECT ID " +
"FROM EVAL_MASTER_EVAL_DETAIL";
details = session.createSQLQuery(query).addEntity("d", EvalMasterEvalDetail.class).list();
这有效,但我只得到标量值:
String query = "SELECT ID " +
"FROM EVAL_MASTER_EVAL_DETAIL";
details = session.createSQLQuery(query).list();
最佳答案
这是我最终做的事情。
-我使用 HQL 而不是我的原生 SQL(引用对象字段而不是数据库列)
-创建了一个带有 getter 和 setter 的新域类来定义/保存我的查询结果(类包含来自 5 个不同对象/表的字段)
public class EvalForm {
private BigDecimal detailId;
private BigDecimal detailOrder;
private BigDecimal groupId;
private String groupName;
}
-使用我的新类的字段名作为列别名
String query = "SELECT d.id as detailId, d.detailOrder as detailOrder, g.id as groupId, g.name as groupName....
- 添加 setResultTransformer 以指向我的新类
details = session.createQuery(query).setParameter("evalId", evalId).setResultTransformer(Transformers.aliasToBean(EvalForm.class)).list();
结果呢?非常适合 JSON 输出。
[{"detailId":44,"detailOrder":0,"groupId":128,"groupName":"My dope name"},{"detailId":42,"detailOrder":1,"groupId":68,"groupName":"qGroup AJAX"},{"detailId":81,"detailOrder":2,"groupId":68,"groupName":"qGroup AJAX"}]
关于java - Hibernate createSQLquery 的无效列名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197246/
当我尝试使用 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
我是一名优秀的程序员,十分优秀!