【问题标题】:Hibernate + PostgreSQL throws an Exception: Unknown entityHibernate + PostgreSQL 抛出异常:未知实体
【发布时间】:2015-09-22 01:08:07
【问题描述】:

我使用jersey + hibernate 为restful webservice 编写了一个java maven 项目并具有以下error

javax.servlet.ServletException: org.hibernate.MappingException: 未知实体:org.asad.dto.logindetail

org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:419)

org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java: 381) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)

org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java: 221)

hibernate.cfg.xml 文件:

 <?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">


<hibernate-configuration>


    <session-factory>


        <!-- Database connection settings -->

        <property name="connection.driver_class">org.postgresql.Drive</property>

        <property 
    name="connection.url">jdbc:postgresql://localhost:5432/logindb</property>

    <property name="connection.username">postgres</property>

        <property name="connection.password">project</property>

        <!-- JDBC connection pool (use the built-in) -->

        <property name="connection.pool_size">1</property>


        <!-- SQL dialect -->

        <property 
    name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>

        <!-- Disable the second-level cache  -->

    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>


        <!-- Echo all executed SQL to stdout -->

        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->

        <property name="hbm2ddl.auto">update</property>

        <propertyname="connection.driver_class">org.postgresql.Driver</property>

        <!-- Names the annotated entity class -->

        <mapping class="org.asad.dto.logindetail"/>

    </session-factory>

</hibernate-configuration>

表名是“logindetail”。

数据库类:

 @Entity
     @Table (name = "logidetail")  public class logindetail {

    @Id

    int userId;

    String name;

    String password;


    public void setUserId(int i){

        this.userId = i;

    }

    public int getUserId(){

        return userId;

    }

    public void setName(String name){

        this.name  = name;

    }

    public String getName(){

        return name;

    }

    public void setPassword(String pass){

        this.password = pass;

    }

    public String getPassword(){

        return password;

    }}

主类:

 package org.asad.login.login.loginservice; 

import java.util.ArrayList;

import javax.management.Query;

import javax.validation.Validation;

import javax.validation.Validator;

import javax.validation.ValidatorFactory;

import org.asad.dto.logindetail;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configurationimport org.hibernate.classic.Session;

public class LoginService{

    SessionFactory sessionFactory = null;

    Session session = null;

    public String getDatabaseUser(){

        logindetail user = null;

        String name=null;try{

        sessionFactory = new Configuration().configure().buildSessionFactory();

        session = sessionFactory.openSession();

        session.beginTransaction();

        user = (logindetail)session.get(logindetail.class, 2);

        name = user.getName();

        session.getTransaction().commit();

        session.close();

    }catch(Exception e){

       e.printStackTrace();

     }

    return name;

        }}

现在这个错误来了java.lang.NullPointerException 任何人都可以帮助我消除此错误,我将不胜感激:)

【问题讨论】:

  • 请不要使用小写的类名。但这不是问题。我在您的类代码上方没有看到包指令。但是您使用了包“org.asad.dto”。在休眠配置中。这可能是问题所在。如果是这样,请将课程放在相应的位置。包。
  • 检查logindetail的包是否和中提供的一样。
  • @PeterPaulKiefer 好的,我以后会注意类名的。包放在类里了,还是报错。
  • @barthel 是的包与映射类中提供的包相同。
  • 告诉我们引发此异常的操作并提供 完整 堆栈跟踪和 Hibernate 版本。还将休眠的日志级别切换到调试/跟踪将更多地解释错误。

标签: java hibernate web-services postgresql maven


【解决方案1】:

您能否检查您是否导入了正确的@Entity 注释。

@Entity 有两个包,一个是 org.hibernate.annotations.Entity,另一个是 javax.persistence.Entity

使用javax.persistence.Entity 注释您的实体bean。不要导入org.hibernate.annotations.Entity

【讨论】:

  • 它可以工作,但数据不是来自显示 204 无内容的数据库
  • 发布您的主要课程内容,然后只有一个人可以提出建议。
  • @Asad 我选择了这个答案,因为它可能会帮助其他有类似问题的开发人员。它向你和我展示了 ;-) 提供一个完整的类文件是多么重要——包括包和导入。幸运的是,Arpit 有如此丰富的经验来正确猜测答案。
  • @Arpit 我添加了课程看看并建议我
  • @Asad 改为 logindetail 实体类。 在保存问题之前检查格式和布局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多