【问题标题】:Hibernate mapping unsuccessful - don't know where the error is occuringHibernate 映射不成功 - 不知道错误发生在哪里
【发布时间】:2015-12-02 09:07:29
【问题描述】:

我查看了堆栈溢出以找到导致此问题的不同原因和排列,但我认为尚未询问过这种情况。

错误

我正在尝试在 Maven 上使用 hibernate 和 spring MVC,由于某种原因,hibernate.cfg.xml 的映射没有正确映射(我检查了我的路径,我认为它是正确的)。我收到以下错误:

org.hibernate.MappingException: Unknown entity: com.firstspringmvcproject.introcontroller.Entry

使用此映射:

<mapping class="com.firstspringmvcproject.introcontroller.Entry" />

在我的 hibernate.cfg.xml 文件中。

文件结构

这是我的文件结构:

来自项目浏览器

来自导航器

对于那些感兴趣的人 - 一些特定的文件:

hibernate.cfg.xml

<!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>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.username">NAMEHERE</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/hibernatedb</property>

        <property name="connection_pool_size">1</property>

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

        <property name="show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <mapping class="com.firstspringmvcproject.introcontroller.Entry" />

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

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>FirstSpringMVCProject</display-name>

  <servlet>
    <!--  name of the servlet will add a -servlet postfix 
        unless otherwise specified. -->
    <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class> <!-- is the class for which to find the servlet -->
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

非常简单的休眠 POJO

package com.firstspringmvcproject.introcontroller;

import java.util.Date;

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

@Entity
@Table(name="ENTRY_DATE")
public class Entry {

    @Id @GeneratedValue
    int entryInfo;
    Date date;

    public int getEntryInfo() {
        return entryInfo;
    }

    public void setEntryInfo(int entryInfo) {
        this.entryInfo = entryInfo;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

}

我认为可能是错误

  • 我认为这可能是因为我的 hibernate.cfg.xml 没有找到 src/main/resources(由于某种原因我的项目没有那个),所以它找不到 bean。这就是我创建项目的方式:新建-> 动态 Web 项目,创建后:-> 配置-> 配置到 Maven 项目。这样,由于某种原因,我看不到 src/main/resources 或 src/main/java。我的 src 文件是单独的。我试图通过目录手动添加文件,但 pom.xml 拒绝了它,我不得不回滚到原始更改。问题是,我在 Maven 中有我的 spring jars,它确实找到了我的控制器,它位于同一目录附近。
  • 我的休眠 POJO Entry.java 有问题(但我认为这不太可能,因为它很简单)
  • 可能是错字?(真的不太可能,我到处找)

编辑:有人猜测我可能没有为休眠下载正确的 jar。这是我的 Maven 依赖项选项卡。

【问题讨论】:

  • 我看不出您的配置有什么问题。 Hibernate 5.0.0 旨在与 Spring 4.2.0 一起工作,我看到你有,但也许你可以尝试使用 hibernate-core-4.3.7 或一些较小的版本来检查它不是依赖版本问题?
  • @smoggers 是的,这就是问题所在!该死的休眠 5.0.0...

标签: java xml hibernate maven


【解决方案1】:

如果你有一个 Entry.hbm.xml 然后尝试添加 hbm.xml 文件的路径:

<mapping class="com.firstspringmvcproject.introcontroller.Entry" />
<mapping resource="com/firstspringmvcproject/introcontroller/Entry.hbm.xml"/>

【讨论】:

  • 嗨,我没有 entry.hbm.xml - 它是基于注释的。我需要一个吗?
  • 如果是基于注解的,则不需要 hbm.xml 文件。你有其他课程还是只是入门课程?
  • 这是我唯一的休眠课程。另一个是春天的,它有效。它只是一个控制器。
  • 试试 xml 方式,它不是最好的选择,但可能适用于您的第一个项目。
【解决方案2】:

请检查 hibernate jars 是否正确添加为 pom.xml 中的依赖项 您可以通过在 Entry 类中使​​用 Hibernate 注释 (org.hibernate.annotations.Entity) 而不是 JPA 注释 (javax.persistence.Entity) 来检查这一点。 如果 Jar 没有正确导入,您的项目将无法成功构建。

【讨论】:

  • 是的。 org.hibernate.annotations.Entity 已弃用。推荐使用 JPA 注解。您遇到的问题应该是休眠罐在朗姆酒时间不可用。您应该将它添加到您的 pom.xml 并使用 Maven 构建和打包它。
  • 尝试将以下依赖项添加到您的 pom.xml 并检查。 org.hibernatehibernate-entitymanager5.0.0.Final
  • 如何构建和打包应用程序?是使用 Maven 还是使用 Eclipse?
  • @OneRaynyDay 最后它通过将休眠版本更改为 4.3.6 来工作。请将您的依赖替换为以下内容并尝试。 org.hibernatehibernate-core4.3.6.Final
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 2019-01-02
  • 2012-01-13
  • 1970-01-01
  • 2015-07-13
相关资源
最近更新 更多