2015-07-18 2 views
2

Я пытаюсь запустить проект Hibernate Hello World Project на основе maven. Я сделал каждый шаг правильно, но он дает исключение сопоставления Hibernate: Неизвестная сущность. Я уже объявил отображение моего класса Entity в Hibernate.cfg.xml.Исключение отображения спящего режима [Пробовал предыдущие решения]

Вот мой код файла конфигурации.

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<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/test 
    </property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">root</property> 

    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 

    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</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 
     if table isn't present hibernate will create the table --> 
    <property name="hbm2ddl.auto">create</property> 

    <property name="hibernate.current_session_context_class">thread</property> 
    <mapping class="com.openlibrary.model.Book"/> 


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

Вот Factory Session код

public static SessionFactory getSessionFactory() { 

    if (sessionFactory == null) { 

     Configuration configuration = new Configuration(); 
     configuration.configure(); 
     serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
     sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

    } 
    return sessionFactory; 
} 

И моя модель класса пакет com.openlibrary.model;

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

@Entity 
public class Book { 
    @Id 
    @GeneratedValue 
    int bookID; 
    String bookName; 

    public int getBookID() { 
     return bookID; 
    } 

    public void setBookID(int bookID) { 
     this.bookID = bookID; 
    } 

    public String getBookName() { 
     return bookName; 
    } 

    public void setBookName(String bookName) { 
     this.bookName = bookName; 
    } 
} 

А вот исключение

Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister: com.openlibrary.model.Book 
at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:787) 
at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2637) 
at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164) 
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2575) 
at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2562) 
at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044) 
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) 
at com.openlibrary.dao.BookDAO.getBookById(BookDAO.java:43) 
at com.openlibrary.test.Testing.main(Testing.java:22) 

Я знаю, что такой вопрос был задан раньше, но я не могу понять, почему спящий режим бросает исключение, когда отображение уже сделано. Я сделал это в последний раз почти год назад. Он работал так же. Нужна помощь здесь.

Теперь в сценарии есть небольшой поворот. Я обошел исключение, изменив свою зависимость от maven-hibernate-core. Я получал исключение из этой зависимости. Это было последнее на веб-сайте maven.

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.0.0.CR2</version> 
</dependency> 

Я поменял версию на 4.3.7.Final. Тогда не было никаких исключений. Я не знаю, почему это исключение. Может быть, кто-то может объяснить. Я буду очень благодарен.

+0

Должен ли файл быть назван hibernate.cfg.xml (с учетом регистра, h вместо H)? Вы действительно использовали свой файл конфигурации (может быть, у вас есть другой файл конфигурации в вашем пути к классу? Или вы упаковали свой класс объектов в приложение? – diufanman

+2

Можете ли вы отправить исключение, которое вы получаете? –

+0

@diufanman sorry Я просто набрал неправильный вопрос. На самом деле это hibernate.cfg.xml и то же самое в моем проекте. И да, я уверен в этом файле конфигурации, и я правильно поместил класс сущности. –

ответ

1

Ваша книга не реализована Сериализуемая. попробуйте с этим.

public class Book implements Serializable{ 
} 
0

Я считаю, с последними версиями спячки они удалили поддержку <mapping> тега в конфигурационном файле. Вместо этого вы можете использовать метод addAnnotatedClass(<Your domain class>), определенный в классе конфигурации. т. е. configuration.addAnnotatedClass (Book.class); в этом случае.

-Madhu.

2

Сначала реализовать Serializable интерфейс в классе сущностей,

public class Book implements Serializable{ 
} 

Во-вторых Не использовать конфигурацию с StandardServiceRegistryBuilder, конфигурация считается устаревшей, , но вместо того, чтобы сделать самонастройку, как указано в документации зимуют 5, для ссылки идут tobelow ссылки,

http://docs.jboss.org/hibernate/orm/5.0/userGuide/en-US/html_single/#bootstrap-native-sessionfactory

или вы можете изменить свой код, как показано ниже, чтобы дать попробовать я надеюсь, что это будет работать

if (sessionFactory == null) { 

     Configuration configuration = new Configuration(); 
     configuration.configure("hibernate.cfg.xml"); 
     configuration.addClass(Book.class).addResource("com/openlibrary/model/Book.hbm.xml"); 
     serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()); 
     sessionFactory = configuration.buildSessionFactory(serviceRegistry.build()); 

    } 
1

Не используйте Конфигурация с StandardServiceRegistryBuilder, конфигурация считается устаревшей, но вместо того, чтобы сделать самонастройку, как указано в документации зимуют 5, у меня была та же проблема, и это зафиксировал его.

StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder() 
.configure("org/hibernate/example/MyCfg.xml") 
.build(); 

Metadata metadata = new MetadataSources(standardRegistry) 
.addAnnotatedClass(MyEntity.class) 
.addAnnotatedClassName("org.hibernate.example.Customer") 
.addResource("org/hibernate/example/Order.hbm.xml") 
.addResource("org/hibernate/example/Product.orm.xml") 
.getMetadataBuilder() 
.applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE) 
.build(); 

SessionFactory sessionFactory = metadata.getSessionFactoryBuilder() 
.applyBeanManager(getBeanManagerFromSomewhere()) 
.build(); 

для получения более подробной информации, проверьте documentation

0

-Ваш Книга Модель класса не будет реализован Serializable интерфейс.

-Попробуйте с кодом ниже.

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

    @Entity 
    public class Book implements Serializable { 
     @Id 
     @GeneratedValue 
     int bookID; 
     String bookName; 

     public int getBookID() { 
      return bookID; 
     } 

     public void setBookID(int bookID) { 
      this.bookID = bookID; 
     } 

     public String getBookName() { 
      return bookName; 
     } 

     public void setBookName(String bookName) { 
      this.bookName = bookName; 
     } 
    } 
0

Очевидно, что вы должны добавить, но не влияет:

public class Book implements Serializable{ 
    }   

Но когда я изменил версию 4.3.7.Final. Тогда не было никаких исключений.

Смежные вопросы