JBOSS eap 7.0无法在JPA查询中找到javax.faces.model.SelectItem类
enter image description here我有一个在JBOSS AS 6.1中工作的EAR项目(JSF/RICH FACES,JPA 2.0),我必须迁移到JBOSS EAP 7.0。在部署时,我在创建持久性单元期间遇到以下错误。JBOSS eap 7.0无法在JPA查询中找到javax.faces.model.SelectItem类
**"[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和实现,我试图包括在我的lib文件夹中,但仍然得到相同的错误。 请帮助
UPDATE:
下面是我的图书馆名单:
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对JSF 1.2
更新: 关于从加布里埃尔的回答中得到答案,我搜查了EAP 7图书馆,发现有一半的图书馆已经提供。我从我的LIB中删除了已经由EAP 7提供的库,但仍然收到相同的错误。 出于某种原因,HIBERNATE 5.0是不包加载类 javax.faces.model.SelectItem
我验证类中下jaxax的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。
欢迎任何其他想法/建议。
它可能是一个类路径相关的问题,可能是同一类的两个版本加载。 检查您是否在服务器提供的战争中包含了一个jar。 你可以添加你的库设置?
我看到您拥有平台提供的jstl.jar和standard.jar。不知道该罐子是否包含有问题的课程,但无论如何,你需要删除它们。
UPDATE
据我所知,JBoss的EAP应JEE6柔顺的,因此应该使用JSF 2.0,并迁移到JBoss EAP(JEE7兼容JSF 2.2)应该是无痛的。
但您指出您正在使用JSF 1.2,我猜你正在使用JBoss EAP 6中的兼容模式,如blog中所述。
似乎Wildfly/JBoss EAP 7不再支持JSF 1.2,请查看this page了解如何添加自定义JSF版本的说明。
删除了由EAP提供的一些罐子,包括您提到的罐子。仍然有相同的错误。检查更新的帖子。 – user2014600
我认为你误解了AS 6.1作为EAP 6.0。我试图从(社区版本)AS 6.1迁移到EAP 7.0,因此它使用的是JSF 1.2。我只是删除了与JSF相关的所有jar,但是一些如何不被namedquery加载。我想我应该首先测试一个JSF hello world,以确保它读取EAP 7.0提供的JSF库。 – user2014600
您是对的,我误读了。您需要提供您的自定义JSF版本。 –