【发布时间】:2017-11-18 13:39:00
【问题描述】:
enter image description here我有一个在 JBOSS AS 6.1 中工作的 EAR 项目(JSF/RICH FACES,JPA 2.0),我必须迁移到 JBOSS EAP 7.0。在部署时,我在创建持久性单元期间遇到以下错误。
**"[PersistenceUnit: changecdb] Unable to build Hibernate SessionFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: changecdb] Unable to build Hibernate SessionFactory
Caused by: org.hibernate.HibernateException: Errors in named queries: getSubReports, getAllReports"}}}} "**
日志显示以下错误:
**"ERROR [org.hibernate.internal.SessionFactoryImpl] (ServerService Thread Pool -- 101) HHH000177: Error in named query: getSubReports: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate class [javax.faces.model.SelectItem] [select new javax.faces.model.SelectItem(r.id,r.name) from com.centurylink.changecejb.entity.Report r where r.id<>? order by r.name asc]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)
"**
以下是包含命名查询的源文件:
package com.centurylink.changecejb.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.NamedQueries;
@SequenceGenerator(name="reportSequence",sequenceName="rep_seq")
@Entity
@NamedQueries({@NamedQuery(name="getAllCustomReports",query="select new com.centurylink.changecejb.bean.SelectBean(r.id,r.name) from Report r order by r.name asc")
,@NamedQuery(name="getCustomReportForAId",query="from Report r where r.id=? ")
,@NamedQuery(name="getSubReports",query="select new javax.faces.model.SelectItem(r.id,r.name) from Report r where r.id<>? order by r.name asc"),
@NamedQuery(name="getAllReports",query="select new javax.faces.model.SelectItem(r.id,r.name) from Report r order by r.name asc"),
@NamedQuery(name="updateCustomReport",query="update Report r set r.name=:name where r.id=:id")
,@NamedQuery(name="deleteCustomReport",query="delete Report report where report.id=:id")})
@Table(name="report_table")
public class Report {
private String filename;
private String name;
@Id
@GeneratedValue(generator="reportSequence",strategy=GenerationType.SEQUENCE)
private int id;
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
我没有包含 JSF api 和 impl ,我确实尝试将它们包含在我的 lib 文件夹中,但仍然遇到相同的错误。 请帮忙
更新:
以下是我的图书馆列表:
common-annotations.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-logging.jar
cssparser-0.9.5.jar
guava-10.0.1.jar
guava-gwt-10.0.1.jar
jsonplugin-0.32.jar
jstl.jar
poi-3.6-20091214.jar
richfaces-components-api-4.2.0.Final.jar
richfaces-components-ui-4.2.0.Final.jar
richfaces-core-api-4.2.0.Final.jar
richfaces-core-impl-4.2.0.Final.jar
sac-1.3.jar
standard.jar
下面是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="changecdb" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/changec</jta-data-source>
<class>com.centurylink.changecejb.entity.Report</class>
</persistence-unit>
</persistence>
我想知道这是否是由于 EAP 7.0 具有 Hibernate 5.0 而 AS6.1 具有 Hibernate 3.6 和/或 JSF 2.2 vs JSF 1.2
更新: 在从 Gabriel 的回答中获取问题时,我搜索了 EAP 7 库,发现已经提供了一半的库。我从我的 LIB 中删除了 EAP 7 已经提供的库,但我仍然遇到同样的错误。 由于某种原因,HIBERNATE 5.0 不能加载类 javax.faces.model.SelectItem
我确认该类存在于 jaxax/faces 模块下的 EAP 7.0 库之一 jboss-jsf-api_2.2_spec-2.2.12.redhat-1.jar
以下是我当前的 lib 文件夹内容:
commons-digester.jar
commons-logging.jar
cssparser-0.9.5.jar
jsonplugin-0.32.jar
poi-3.6-20091214.jar
richfaces-components-api-4.2.0.Final.jar
richfaces-components-ui-4.2.0.Final.jar
richfaces-core-api-4.2.0.Final.jar
richfaces-core-impl-4.2.0.Final.jar
sac-1.3.jar
作为一种解决方法,我正在考虑提供自己的 JSF (1.2) 和 Hibernate (3.6) 库,并在 Standalone.xml 中禁用 EAP。
欢迎提出任何其他想法/建议。
【问题讨论】: