2016-06-13 2 views
2

Я пытаюсь интегрировать последнюю версию весны с последней версией спящего режима. Все основано на аннотациях. Я получаю исключение: -Hibernate 5 annotation org.hibernate.MappingException: Неизвестный объект

Caused by: org.hibernate.MappingException: Unknown entity: com.example.model.Customer 
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1447) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678) ~[hibernate-core-5.0.0.Final.jar:5.0.0.Final] 

Я проверил другие подобные вопросы на StackOverflow, но ни одно из решений, предусмотренных затем работал для меня. Вот код: -

@SpringBootApplication 
@EnableTransactionManagement 
public class SpringHibernateDemoApplication implements CommandLineRunner { 

    public static void main(String[] args) { 

     SpringApplication.run(SpringHibernateDemoApplication.class, args); 
    } 

    @Bean 
    public DataSource dataSource() throws ClassNotFoundException { 
     SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); 
     dataSource.setDriverClass((Class<? extends Driver>)Class.forName("com.mysql.jdbc.Driver")); 
     //BasicDataSource dataSource = new BasicDataSource(); 
     //dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3306/customerDB"); 
     dataSource.setUsername("root"); 
     dataSource.setPassword("welcome"); 
     return dataSource; 
    } 

    @Bean 
    public SessionFactory createSessionFactory() throws ClassNotFoundException { 
     Configuration configuration = new Configuration(); 
     configuration.addAnnotatedClass(Customer.class); 

     Properties properties = new Properties(); 
     properties.put("hibernate.dialect","org.hibernate.dialect.MySQLDialect"); 
     properties.put("hibernate.show_sql", "true"); 
     properties.put("hibernate.hbm2ddl.auto","update"); 

     configuration.setProperties(properties); 


     StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(); 
     standardServiceRegistryBuilder.applySettings(configuration.getProperties()); 
     standardServiceRegistryBuilder.applySetting(Environment.DATASOURCE,dataSource()); 

     MetadataSources metadataSources = new MetadataSources(standardServiceRegistryBuilder.build()); 

     //metadataSources.addPackage(""); 
     return metadataSources.getMetadataBuilder().build().buildSessionFactory(); 

     //return metadataSources.getMetadataBuilder().build().getSessionFactoryBuilder().build(); 
    } 

    @Bean 
    public CustomerDao customerDao() { 
     return new CustomerDao(); 
    } 

    @Bean 
    public HibernateTransactionManager hibernateTransactionManager() throws ClassNotFoundException { 
     return new HibernateTransactionManager(createSessionFactory()); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
     Customer customer = new Customer(); 
     customer.setFistName("Amar"); 
     customer.setLastName("Arya"); 
     customer.setEmail("[email protected]"); 
     customerDao().saveCustomer(customer); 
    } 
} 

Объект Модель: -

@Entity 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    //@GeneratorType() 
    private int id; 

    private String fistName; 
    private String lastName; 
    private String email; 

    public Customer(String fistName, String lastName, String email) { 
     this.fistName = fistName; 
     this.lastName = lastName; 
     this.email = email; 
    } 

    public Customer() { 
    } 

    public int getId() { 
     return id; 
    } 

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

    public String getFistName() { 
     return fistName; 
    } 

    public void setFistName(String fistName) { 
     this.fistName = fistName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 
} 

дао слой

public class CustomerDao extends AbstractDao<Customer> { 

    public void saveCustomer(Customer customer) { 
     save(customer); 
    } 
} 

@Transactional 
public abstract class AbstractDao<E> { 

    @Autowired 
    protected SessionFactory sessionFactory; 

    public void save(E e) { 
     saveEntity(e); 
    } 

    private void saveEntity(E e) { 
     Session session = sessionFactory.openSession(); 
     Transaction transaction = session.beginTransaction(); 
     session.save(e); 
     transaction.commit(); 
    } 
} 

ответ

0

Вы смешиваете 2 подхода для настройки сеанса завода:

  • устаревший способ с использованием Configuration класс
  • новый способ использования MetadataSources и ServiceRegistryBuilder

Попробуйте использовать только новый способ что-то вроде этого:

@Bean 
public SessionFactory createSessionFactory() throws ClassNotFoundException { 

    Properties properties = new Properties(); 
    properties.put("hibernate.dialect","org.hibernate.dialect.MySQLDialect"); 
    properties.put("hibernate.show_sql", "true"); 
    properties.put("hibernate.hbm2ddl.auto","update"); 

    StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(); 
    standardServiceRegistryBuilder.applySettings(properties); 
    standardServiceRegistryBuilder.applySetting(Environment.DATASOURCE,dataSource()); 

    MetadataSources metadataSources = new MetadataSources(standardServiceRegistryBuilder.build()); 
    metadataSources.addAnnotatedClass(Customer.class); 
    return metadataSources.getMetadataBuilder().build().buildSessionFactory(); 
} 
+0

Это работает !!!! Большое спасибо. У меня есть другой вопрос. Как добавить несколько файлов? addPackage ("packagename"), похоже, не работает. –

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