org.hibernate.MappingException: неизвестный объект

Этот вопрос отличается от других вопросов по той же теме MappingException: Неизвестная сущность, потому что у меня есть эта строка в моей конфигурации hibernate:

<mapping class="bbb.Students" />

Мой класс сущности выглядит следующим образом:

 package bbb;

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

@Entity
@Table(name = "Students")
public class Students implements java.io.Serializable {

private String id;
private String name;
private String number;


@Id
@Column(name = "ID", unique = true, nullable = false)
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}

@Column(name = "NAME", nullable = false)
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

@Column(name = "NUMBER", nullable = false)
public String getNumber() {
    return number;
}
public void setNumber(String number) {
    this.number = number;
}
}

У меня есть тест базы данных и таблица Студенты, созданные вручную.

Ошибка:

 org.hibernate.MappingException: Unknown entity: bbb.Students

Exception in thread "main" org.hibernate.MappingException: Unknown entity: bbb.Students
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776)
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1533)
    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:682)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:674)
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:669)
    at bbb.App.main(App.java:39)

Основной класс выглядит следующим образом:

package bbb;



import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

public class App 
{
public static void main( String[] args )
{

    System.out.println("Hibernate one to one (Annotation)");

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

    Session session = sf.openSession();
    session.beginTransaction();

    Students s = new Students();

    s.setId("1");
    s.setName("Joe");
    s.setNumber("12345");



    session.save(s);
    session.getTransaction().commit();

    System.out.println("Done");
}
}

Полный файл hibernate.config выглядит следующим образом:

 <?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>
 <property    name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
 <property name="hibernate.connection.username">root</property>
 <property name="hibernate.connection.password">root</property>
 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 <property name="show_sql">true</property>
 <mapping class="bbb.Students" />
 </session-factory>
 </hibernate-configuration>

1 ответ

Просто импортируйте ваш класс учеников в проект на основе Hibernate. Все отлично работает Перед запуском приложения я создал схему "тест" вручную. Опубликовать класс с основным методом. Возможно, что-то не так в этом.

Обновление: импортировал ваш основной метод. Приложение все еще работает. Не могу воспроизвести проблему.

import bbb.Students;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;


public class Main {
    private static final SessionFactory ourSessionFactory;

    static {
        try {
            ourSessionFactory = new Configuration().
                    configure("hibernate.cfg.xml").
                    buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException {
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception {
        final Session session = getSession();
        try {
           Transaction transaction= session.beginTransaction();
            Students student = new Students();
            student.setName("Vasua");
            student.setNumber("13");
            student.setId("1");
            session.save(student);
            transaction.commit();
                    } finally {
            session.close();
        }
    }
}




<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernte Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">
        jdbc:mysql://localhost/stack
        </property>
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.username">
            root
        </property>
        <property name="connection.password">
            root
        </property>
        <!-- DB schema will be updated if needed -->
        <property name="hbm2ddl.auto">update</property>
        <mapping class="bbb.Students"/>
    </session-factory>
</hibernate-configuration>
Другие вопросы по тегам