【问题标题】:Hibernate Maven MappingException Unknown entityHibernate Maven MappingException 未知实体
【发布时间】:2016-04-10 00:01:40
【问题描述】:

我在 Maven 中使用休眠时遇到了异常。休眠版本是 5.1.0.Final。 例外是: 这是我的项目结构:

这是我的实体类 ABC:

package com;
import javax.persistence.*;
@Entity

@Table(name = "abc_inf")

public class ABC {

    @Id@GeneratedValue
    private Integer id;

    private String name;

    public ABC() {
    }

    setters and getters omitted 

}

这是我的主要课程:

package com;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class Main {
    public static void main(String[] args) {
        Configuration conf = new Configuration().configure();
        ServiceRegistry sr = new             StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
        SessionFactory sf = conf.buildSessionFactory(sr);
        Session session = sf.openSession();

        ABC abc = new ABC();
        abc.setName("abc");

        session.save(abc);
        session.flush();
        session.close();
        sf.close();
    }
}

这是我的 hibernate.cfg.xml:

<hibernate-configuration>
  <session-factory>
    mysql connection and properties settings omitted
    <mapping class="com.ABC"/>
  </session-factory>
</hibernate-configuration>

【问题讨论】:

  • 您能否在运行主程序之前确认您正在调用 hibernate.cfg.xml 来配置您的实体
  • 它使用hibernate.cfg.xml,否则它会抛出一些连接异常,因为它首先无法连接到数据库。我还打印了 Configuration 中的属性,它与 hibernate.cfg.xml 中定义的属性相同

标签: java hibernate maven


【解决方案1】:

这是一个 Hibernate 5 配置问题。您不能使用此代码来构建会话工厂

Configuration conf = new Configuration().configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(conf.getProperties()).build();
SessionFactory sf = conf.buildSessionFactory(sr);

改用这个

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

请参阅其他说明

Hibernate 5 :- org.hibernate.MappingException: Unknown entity

【讨论】:

    【解决方案2】:

    如果使用Hibernate 4,问题就解决了

    【讨论】:

      【解决方案3】:

      您需要将带注释的类添加到休眠配置中。使用以下代码

      AnnotationConfiguration conf = new AnnotationConfiguration();
      conf.addAnnotatedClass(ABC.class);
      SessionFactry sf = conf.configure(hbmFile).buildSessionFactory();
      

      【讨论】:

      • 使用AnnotationConfiguration仅对Hibernate 3有效。此代码适用于Configuration,但需要添加每个持久类。
      【解决方案4】:

      至于我的情况,我使用LocalSessionFactoryBeansetPackagesToScan,并且为审计实体编写的服务工作正常。

      但是!!!

      在我们的项目中,我们有一个表EntityInfo,列entityname,例如,

      entytyname = bel.rdigital.cashbox.models.cbmain.merchantcore.versions.CBVersions

      这会持续存在于数据库中。然后我重构了实体CBVersions并将其转移到包中

      bel.rdigital.cashbox.models.cbmain.versions.cashbox.CBVersions,

      但在 db 中仍然是旧包,而不是当我使用方法 CrossTypeRevisionChangesReader.findEntitiesGroupByRevisionType(revision) 时,

      我收到异常Unknown entity: bel.rdigital.cashbox.models.cbmain.merchantcore.versions.CBVersions

      所以,这个扩展意味着,hiberante 找不到实体...问题可能出在包扫描或位置实体中...

      【讨论】:

      • 你不应该使用问题作为答案。
      • 我的回答中的问题在哪里???我简单解释一下我们的情况,以及我如何解决这个问题!!!
      • 好吧,让它成为一个答案。顺便说一下,原始问题中没有任何与 Spring 相关的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多