org.hibernate.AnnotationException:没有为实体指定标识符:login.Users [英] org.hibernate.AnnotationException: No identifier specified for entity: login.Users
本文介绍了org.hibernate.AnnotationException:没有为实体指定标识符:login.Users的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当servlet遇到问题时出现错误,我尝试了很多解决方法,但没有得到正确的解决方案。
Registration.java(Servlet类文件)
包登录;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
导入org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
@WebServlet(/ Registration)
公共类注册扩展HttpServlet {
private static final long serialVersionUID = 1L;
public registration(){
super();
$ b保护无效doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException {
字符串username = request.getParameter(username );
String password = request.getParameter(password);
String name = request.getParameter(name);
用户u =新用户();
u.setUsername(username);
u.setPassword(password);
u.setName(name);
String uname = u.getUsername();
System.out.println(uname);
SessionFactory sessionFactory = new Configuration()。configure()。buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(u);
session.getTransaction()。commit();
session.close();
sessionFactory.close();
$ b Users.java 这个类用于在用户表中存储用户信息
包登录;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name =Users)
public class Users {
private String username;
私人字符串密码;
私人字符串名称;
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
hibernate.cfg.xml
<?xml version =1.0encoding =utf-8?>
<!DOCTYPE hibernate-configuration SYSTEMhttp://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd\">
< hibernate-configuration>
< session-factory>
< property name =connection.driver_class> com.mysql.jdbc.Driver< / property>
< property name =connection.url> jdbc:mysql:// localhost:3306 / login< / property>
< property name =connection.username> root< / property>
< property name =connection.password>< / property>
< property name =connection.pool_size> 1< / property>
< property name =dialect> org.hibernate.dialect.MySQLDialect< / property>
< property name =cache.provider_class> org.hibernate.cache.NoCacheProvider< / property>
< property name =show_sql> true< / property>
< property name =hbm2ddl.auto>建立< / property>
< mapping class =login.Users/>
< / session-factory>
控制台日志
EVERE:Servlet.service()用于servlet [注册]与上下文中的路径[/ loginapp]抛出异常
org.hibernate.AnnotationException:login.Users
。在org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:265)
。在org.hibernate.cfg.InheritanceState:否为实体指定的标识符。 getElementsToProcess(InheritanceState.java:211)
在org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:710)
位于org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl。 processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess $ 1.processEntityHierarchies(MetadataBuildingProcess.java:222)
at org.hibernate.boot.mo del.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
在org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
。在组织。 hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
位于org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
位于org.hibernate.cfg。 Configuration.buildSessionFactory(Configuration.java:692)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
at login.Registration.doPost(Registration.java:47)$ b在javax.servlet.http.HttpServlet.service在javax.servlet.http.HttpServlet.service $ b(HttpServlet.java:646)
(HttpServlet.java:727)
在org.apache.catalina .core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server .WsFilter.doFilter (WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java :208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
。在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
。在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
处org.apache org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
。 catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
。在org.apache.coyote.http11。 AbstractHttp11Processor.process(摘要
at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run( JIoEndpoint.java:316)$ java.util.concurrent.ThreadPoolExecutor.runWorker中的
(未知源)$ java.util.concurrent.ThreadPoolExecutor中的
$ Worker.run(未知源)$ b $ org .apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)$ b $ at java.lang.Thread.run(Unknown Source)
解决方案您缺少一个用作实体标识符的字段。就像这样:
@Id
@GeneratedValue
私人长ID;
另外,请勿忘记此字段的getter。
希望这会有所帮助。
I am getting an error while reuest goes to servlet ,I try alot for resolved this but not get proper solution.
Registration.java (Servlet class file)
package login;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
@WebServlet("/Registration")
public class Registration extends HttpServlet {
private static final long serialVersionUID = 1L;
public Registration() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String name = request.getParameter("name");
Users u = new Users();
u.setUsername(username);
u.setPassword(password);
u.setName(name);
String uname = u.getUsername();
System.out.println(uname);
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(u);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
Users.java this class is used to stored the user information in "Users" table
package login;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@Table(name="Users")
public class Users {
private String username;
private String password;
private String name;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/login</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping class ="login.Users" />
</session-factory>
Console Logs
EVERE: Servlet.service() for servlet [Registration] in context with path [/loginapp] threw exception
org.hibernate.AnnotationException: No identifier specified for entity: login.Users
at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:265)
at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:211)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:710)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
at login.Registration.doPost(Registration.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
解决方案 You are missing a field that serves as identifier for an entity. Something like this:
@Id
@GeneratedValue
private long id;
Also do not forget a getter for this field.
Hope this helps.
这篇关于org.hibernate.AnnotationException:没有为实体指定标识符:login.Users的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文