我最近一直在使用 Netbeans 和 MySQL 创建一个 Spring+Hibernate 应用程序,但我的代码块中遇到了一些问题:
public List listSystemProcess() {
List procesosSistema = null;
String hbQuery = "from TableProcess";
try {
Session hbSesion = HibernatePersistenceHandler.getSessionFactory().openSession();
Transaction tx = hbSesion.beginTransaction();
Query query = hbSesion.createQuery(hbQuery);
procesosSistema = query.list();
tx.commit();
hbSesion.close();
} catch (Exception e) {
e.printStackTrace();
}
return procesosSistema;
}
这根本不起作用,我收到一些与 SQL 语法异常相关的信息,告诉我“select id2_1,uj8_,5sd_11 from tb_2_1...”附近有语法错误
如果我创建一个 SQLQuery 而不是 HQL,它可以完美地工作,但我发现这样做没有什么用处,因为我应该为每个单独的进程执行此操作,这很乏味,而且与使用 JDBC 几乎相同。
这有效:
String hbQuery = "select p.id,p.nombre,p.descripcion,p.frecuencia_uso,t.nombre "
+ "from tb_proceso_sistema p inner join tb_tipo_proceso t "
+ "on p.tb_tipo_proceso_id = t.id";
Query query = hbSesion.createSQLQuery(hbQuery);
但是当我这样做时,我的 jsp 也发生了一些变化:
<c:forEach items="${procesosSistema}" var="proceso">
<tr onmouseover="this.style.backgroundColor='#ffff66';"
onmouseout="this.style.backgroundColor='#d4e3e5';">
<td><c:out value="${proceso[0]}"/></td>
<td><c:out value="${proceso[1]}"/></td>
<td><c:out value="${proceso[2]}"/></td>
<td><c:out value="${proceso[3]}"/></td>
<td><c:out value="${proceso[4]}"/></td>
<td></td>
</tr>
</c:forEach>
而不是:
<c:forEach items="${procesosSistema}" var="proceso">
<tr onmouseover="this.style.backgroundColor='#ffff66';"
onmouseout="this.style.backgroundColor='#d4e3e5';">
<td><c:out value="${proceso.id}"/></td>
<td><c:out value="${proceso.nombre}"/></td>
<td><c:out value="${proceso.descripcion}"/></td>
...
<td></td>
</tr>
</c:forEach>
当我设置属性“show_sql”时,它显示一个奇怪的查询,如上所示,类似于:
"select id2_1,uj8_,5sd_11 from SGDP-mysql123.tb_2_1.... tb0"
如果有人能帮助我,我将非常感激。
提前致谢。
最佳答案
你提到的我在这里有一个疑问
String hbQuery = "来自 TableProcess";
您的“TableProcess”类在 hbm.xml 文件中是否有与表的映射?
如果您在第二个查询中使用内部联接,则不能存在这样的映射,您只能像这样使用它。
关于java - Hibernate session.createQuery(from TableProcess).list(); 的问题不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17573722/