2016-10-19 14 views
0

私はjavaとhibernateを使用して最初の簡単なwebappを開発しようとしていますが、動作しません。エラーorg.hibernate.MappingException:不明なエンティティ:com.csm.app1st.model.User

これはエラーです:

org.hibernate.MappingException: Unknown entity: com.csm.app1st.model.User 
    at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620) 
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1606) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:675) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:667) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:662) 
    at com.csm.app1st.controller.AddUser.doPost(AddUser.java:40) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    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:218) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 
    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) 

この私のコードです

のadduser:

package com.csm.app1st.controller; 

import java.io.IOException; 

import javax.servlet.RequestDispatcher; 
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.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 

import com.csm.app1st.model.User; 

/** 
* Servlet implementation class AddUser 
*/ 
@WebServlet(description = "Create new user Servlet", urlPatterns = { "/CreateUser.do" }) 
public class AddUser extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     Configuration config = new Configuration().configure(); 
     ServiceRegistry servReg = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); 
     SessionFactory factory = config.buildSessionFactory(servReg); 

     Session session = factory.openSession(); 
     session.beginTransaction(); 
     User u = new User(request.getParameter("firstname"), request.getParameter("lastname"), request.getParameter("country")); 
     session.save(u); 
     session.getTransaction().commit(); 
     session.close(); 

     RequestDispatcher view = request.getRequestDispatcher("useradd.jsp"); 
     view.forward(request, response); 
    } 

} 

ユーザー

package com.csm.app1st.model; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "user") 

public class User { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name="user_id", nullable=false, unique=true) 
private int id; 

@Column(name="firstname", length=40, nullable=false) 
private String firstname; 

@Column(name="lastname", length=40, nullable=false) 
private String lastname; 

@Column(name="country", length=40, nullable=true) 
private String country; 

public User(String firstname, String lastname, String country) { 
    this.firstname = firstname; 
    this.lastname = lastname; 
    this.country = country; 
} 

get & set... 

} 

設定ファイルが

を休止
<hibernate-configuration> 
    <session-factory> 

     <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> 
     <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 

     <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/firstapp</property> 
     <property name="hibernate.connection.username">postgres</property> 
     <property name="hibernate.connection.password">password</property> 
     <property name="show_sql">false</property> 

     <mapping class="com.csm.app1st.model.User" /> 

    </session-factory> 
</hibernate-configuration> 

なぜ動作しないのかわかりません。 私を助けてもらえますか?

のpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>first_project</groupId> 
    <artifactId>first_project</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
     <directory>src</directory> 
     <excludes> 
      <exclude>**/*.java</exclude> 
     </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.4</version> 
     <configuration> 
      <warSourceDirectory>WebContent</warSourceDirectory> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
+0

あなたのhibernate設定ファイルは 'hibernate.cfg.xml'ですか?あなたのプロジェクトにはどこに配置されていますか? – pleft

+0

これはおそらくあなたの現在の問題を解決することはできませんが、私が見つけた1つのエラー:Hibernateエンティティは引数なしでデフォルトのコンストラクタを常に必要とします。あなたのUserクラスには、このデフォルトコンストラクタがありません。 –

+0

はい設定ファイルの名前はhibernate.cfg.xmlですが問題ですか?ファイルの位置は次のとおりです:Java Resources/src – Scarj

答えて

0

アノテーションを使用しているので、あなたは、この行を変更する必要があります

Configuration config = new Configuration().configure(); 

あなたとほぼ同じで、非常に基本的な例

Configuration config = new AnnotationConfiguration().configure(); 

には可能にで見つけた: http://www.concretepage.com/hibernate/example_annotationconfiguration_hibernate

+0

を投稿するでしょう場合、私はそれをしなかったが、それは動作しませんですが、これは誤りであります、どのバージョンのHibernateを使用していますか?あなたの質問にも投稿する 'pom.xml'ファイルがありますか? – Scarj

+0

奇妙なため、未定義のメソッドのconfigure()される - この行 \tで 複数のマーカー:このdoesntの仕事は、私は実用的なソリューション – pleft

+0

私はhibernate 5.2.3を使用しています.pom.xmlを追加しました。 – Scarj

1

は、私は私のために

SessionFactory factory = new Configuration().configure() 
       .buildSessionFactory(); 

残りすべてsame.Itの作業でadduser.javaファイル

Configuration config = new Configuration().configure(); 
ServiceRegistry servReg = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build(); 
SessionFactory factory = config.buildSessionFactory(servReg); 

に次のコードを交換してみました。

関連する問題