我想从数据库视图中选择执行大量有用计算的记录。我首先将以下片段添加到//= require jquery
//= require jquery_ujs
//= require jquery.mask.min.js
文件中:
.reveg.xml
逆向工程正在生成此<table-filter match-name="v_candidate" />
<table name="v_candidate">
<primary-key>
<key-column name="id"/>
</primary-key>
</table>
文件:
VCandidate.hbm.xml
以下<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Mar 23, 2016 12:12:19 PM by Hibernate Tools 4.3.1.Final -->
<hibernate-mapping>
<class name="db.VCandidate" table="v_candidate" optimistic-lock="version">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="assigned" />
</id>
<property name="outflowElevation" type="big_decimal">
<column name="outflow_elevation" precision="131089" scale="0" />
</property>
<property name="name" type="string">
<column name="name" />
</property>
<property name="floodedVolume" type="java.lang.Double">
<column name="flooded_volume" precision="17" scale="17" />
</property>
<property name="servedArea" type="big_decimal">
<column name="served_area" precision="131089" scale="0" />
</property>
</class>
</hibernate-mapping>
课程:
VCandidate
然后我尝试从此视图中检索可用的记录:
package db;
// Generated Mar 23, 2016 12:12:19 PM by Hibernate Tools 4.3.1.Final
import java.io.Serializable;
import java.math.BigDecimal;
/**
* VCandidate generated by hbm2java
*/
public class VCandidate implements java.io.Serializable {
private Integer id;
private BigDecimal outflowElevation;
private String name;
private Double floodedVolume;
private BigDecimal servedArea;
public VCandidate() {
}
public VCandidate(Integer id) {
this.id = id;
}
public VCandidate(Integer id, BigDecimal outflowElevation, String name, Double floodedVolume, BigDecimal servedArea) {
this.id = id;
this.outflowElevation = outflowElevation;
this.name = name;
this.floodedVolume = floodedVolume;
this.servedArea = servedArea;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public BigDecimal getOutflowElevation() {
return this.outflowElevation;
}
public void setOutflowElevation(BigDecimal outflowElevation) {
this.outflowElevation = outflowElevation;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Double getFloodedVolume() {
return this.floodedVolume;
}
public void setFloodedVolume(Double floodedVolume) {
this.floodedVolume = floodedVolume;
}
public BigDecimal getServedArea() {
return this.servedArea;
}
public void setServedArea(BigDecimal servedArea) {
this.servedArea = servedArea;
}
}
这会立即产生熟悉的异常:
Query query = session.createQuery("from VCandidate");
为此视图生成的Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: VCandidate is not mapped [from VCandidate]
at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1894)
at opt.Main.plotData(Main.java:66)
at opt.Main.main(Main.java:90)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: VCandidate is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:76)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3701)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3590)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:716)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:572)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:309)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:257)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
... 9 more
和.hbm.xml
文件遵循与为表生成的文件几乎相同的模式。但是对于表格,我没有检索记录的问题。
我错过了什么?
答案 0 :(得分:0)
我通过使用本机查询而不是使用HQL来实现它。像这样:
Query query = session.createSQLQuery(
"select * from v_candidate")
.addEntity(VCandidate.class);
List<VCandidate> candidates = query.list();
这是一种解决方法,而不是其他任何方法,但现在它可以很好地完成工作。