【发布时间】:2014-01-14 17:13:35
【问题描述】:
我正在尝试使用休眠建立与我的数据库的连接。 该项目包括 JSF 2.1、Hibernate 3、Primefaces。 我让这个项目运行起来。但是当我将值输入到 usercreate.xhtml 并按添加时,出现堆栈跟踪中提到的错误。
包含的 Jar 文件是
usercreate.xhtml
<h:head>
</h:head>
<h:body>
<h:form>
<table>
<tr>
<td><h:outputLabel for="name" value="Name"/></td>
<td><h:inputText id="name" value="#{userManagedBean.name}">
</h:inputText></td>
</tr>
<tr>
<td><h:outputLabel for="pwd" value="Password"/></td>
<td><h:inputSecret id="pwd" value="#{userManagedBean.password}">
</h:inputSecret></td>
</tr>
<tr>
<td><h:outputLabel for="address" value="Address"/></td>
<td><h:inputText id="address" value="#{userManagedBean.address}">
</h:inputText></td>
</tr>
<tr>
<p:commandButton id="add" value="Add" action="#{userManagedBean.addUser}"> </p:commandButton>
<p:commandButton id="reset" value="Reset" action="#{userManagedBean.reset}"/>
</tr>
</table>
</h:form>
</h:body>
托管 Bean
public class UserManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String password;
private String address;
private static final String SUCCESS = "success";
private static final String ERROR = "error";
//getter and setter of name, password, address included.
public void addUser()
{
User u = new User();
u.setName(name);
u.setPwd(password);
u.setAddress(address);
String result = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(u);
tx.commit();
result = SUCCESS;
} catch (Exception e) {
if (tx != null) {
tx.rollback();
result = ERROR;
e.printStackTrace();
}
} finally {
session.close();
}
}
}
用户模型
@Entity
@Table(name = "tbl_employee")
public class User {
private String name;
private String pwd;
private String address;
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="pwd")
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Column(name="address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
实用程序
public class HibernateUtil {
private static SessionFactory sessionFactory = null;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
sessionFactory = new Configuration().configure()
.buildSessionFactory();
}
return sessionFactory;
}
public static void setSessionFactory(SessionFactory sessionFactory) {
HibernateUtil.sessionFactory = sessionFactory;
}
}
休眠配置文件
<hibernate-configuration>
<session-factory>
<property name='hibernate.connection.driver_class'>com.mysql.jdbc.Driver</property>
<property name='hibernate.connection.url'>jdbc:mysql://localhost:3306/db_employee_spring</property>
<property name='hibernate.connection.username'>root</property>
<property name='hibernate.connection.password'>root</property>
<property name='hibernate.connection.pool_size'>10</property>
<property name='show_sql'>true</property>
<property name='dialect'>org.hibernate.dialect.MySQLDialect</property>
<!-- Mapping files -->
<!-- <mapping resource='hbm/user.hbm.xml' />-->
</session-factory>
</hibernate-configuration>
堆栈跟踪
WARNING: #{userManagedBean.addUser}: java.lang.NoSuchFieldError: INSTANCE
javax.faces.FacesException: #{userManagedBean.addUser}: java.lang.NoSuchFieldError: INSTANCE
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.NoSuchFieldError: INSTANCE
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 26 more
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:94)
at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:250)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:302)
at com.sphc.util.HibernateUtil.getSessionFactory(HibernateUtil.java:12)
at com.sphc.managedbeans.UserManagedBean.addUser(UserManagedBean.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 27 more
我认为 addUser 方法中存在错误(我无法计算),因为我可以在单击 xhtml 中的添加按钮时访问 addUser 方法(通过 sysout)..
【问题讨论】:
-
您是否尝试过从单元测试等中调用 adduser 代码?从堆栈跟踪来看,您的休眠配置可能有问题。您是否有相同项目的其他部分成功使用相同的休眠配置,或者它是一个新项目?
-
您能发布您的实体文件或映射文件吗?给定 getter/setter 的注释可能存在错误。另外,
action="@{userManagedBean.reset}"中的@看起来有点可疑...... -
@L-Ray :我的错误..我已将 @ 更改为 #..但错误仍然存在..我已在问题中添加了实体。由于使用了注解,所以没有使用映射文件。
-
@Matt:我已经包含了配置文件..它实际上是一个新项目..没有其他部分使用 Hibernate 配置。
-
你好夏娃。好吧,看不出有什么问题。所以不会有太大帮助。愿 Entity 类现在吸引其他开发者来帮助你......
标签: hibernate jsf-2 primefaces