【问题标题】:Hibernate error - org.hibernate.MappingException: Unknown entity:休眠错误 - org.hibernate.MappingException:未知实体:
【发布时间】:2016-08-20 19:53:57
【问题描述】:

伙计们!我对休眠 5 有一个非常奇怪的问题。 我在线程“main”org.hibernate.MappingException 中收到异常:未知实体:com.rosko.Merchandiser 当我删除 configuration.addAnnotatedClass(com.rosko.Merchandiser.class)

HibernateUtil.java

public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    try {
        Configuration configuration = new Configuration();
        configuration.configure();
        /* **With this line, everyting is working..** configuration.addAnnotatedClass(com.rosko.Merchandiser.class);*/
        return configuration.buildSessionFactory(
                new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build());
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("There was an error building the factory");
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}}

Application.java

公共类应用程序{

public static void main(String[] args) {


    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();

    Merchandiser merchant = new Merchandiser();

    merchant.setAddress("Viena");
    merchant.setName("sadkada");

    session.save(merchant);     


    session.getTransaction().commit();
    session.close();
}
}

hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/finance?serverTimezone=UTC</property>
    <property name="connection.username">root</property>
    <property name="connection.password">rozeto90</property>
    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>


      <mapping class="com.rosko.Merchandiser" />

</session-factory>

Merchandiser.java

  @Entity
@Table(name="merchandiser")
public class Merchandiser {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="name")
private String name;

@Column(name= "address")
private String address;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}


}

我可以将 xml 文件仅用于映射类吗?

最好的问候。

【问题讨论】:

  • 尝试在debug模式下运行看看configuration.configure()是否找到了被执行的hibernate.cfg.xml

标签: hibernate hibernate-annotations hibernate.cfg.xml


【解决方案1】:

确保hibernate.cfg.xml的文件名和路径正确。

path = src/main/resources/hibernate.cfg.xml

也尝试在 HibernateUtil 类下面使用:

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
        return configuration.buildSessionFactory(serviceRegistry);
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多