简体   繁体   English

Spring + Hibernate:未知实体

[英]Spring + Hibernate : Unknown entity

I'm trying to get an annotation based hibernate configuration working. 我正在尝试使用基于注释的hibernate配置。

applicationContext.xml applicationContext.xml中

<!-- ============================= -->
<!-- DATASOURCE                    -->
<!-- ============================= -->
<bean name="logDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${logs.ds.jndi.name}"/>
</bean>

<!-- ============================= -->
<!-- SESSION FACTORY               -->
<!-- ============================= -->
<bean id="logSessionFactory"
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="packagesToScan" value="com.example.logs.persistence.entity"/>
    <property name="dataSource" ref="logDataSource"/>
    <property name="hibernateProperties">
        <props>
            <!-- dialect -->
            <prop key="hibernate.dialect">${logs.ds.dialect}</prop>
            <prop key="hibernate.connection.useUnicode">true</prop>
            <prop key="hibernate.connection.charSet">UTF-8</prop>

            <!-- schema -->
            <prop key="hibernate.default_schema">${logs.ds.default_schema}</prop>

            <!-- logging debug information -->
            <prop key="hibernate.show_sql">${logs.ds.debug}</prop>
            <prop key="hibernate.format_sql">${logs.ds.debug}</prop>
            <prop key="hibernate.generate_statistics">${logs.ds.debug}</prop>
            <prop key="hibernate.use_sql_comments">${logs.ds.debug}</prop>

            <prop key="configurationClass">org.hibernate.cfg.AnnotationConfiguration</prop>
        </props>
    </property>
</bean>

<bean id="logTransactionManager"
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="logSessionFactory"/>
</bean>

LogsConfiguration.java LogsConfiguration.java

package com.example.logs.persistence.entity;

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

@Entity
@Table(name = "logs_configuration")
public class LogsConfiguration {
    // ...
}

The problem is, when I try to save a LogsConfiguration with my DAO, I get this error : 问题是,当我尝试使用我的DAO保存LogsConfiguration时,我收到此错误:

Caused by: org.hibernate.MappingException: Unknown entity: com.example.logs.persistence.entity.LogsConfiguration
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 com.example.logs.persistence.dao.impl.AbstractDaoImpl.create(AbstractDaoImpl.java:125)

Where did I go wrong ? 我哪里做错了 ? Everything seems ok to me (I am using the javax.persistence annotations) 一切似乎都没问题(我正在使用javax.persistence注释)

Instead of org.springframework.orm.hibernate5.LocalSessionFactoryBean use org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 而不是org.springframework.orm.hibernate5.LocalSessionFactoryBean使用org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

Your entry would be modified as below: 您的参赛作品将被修改如下:

<bean id="logSessionFactory"
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="packagesToScan" value="com.example.logs.persistence.entity"/>
    <property name="dataSource" ref="logDataSource"/>
    <property name="hibernateProperties">
      ...
    </property>
</bean>

I found the solution. 我找到了解决方案。 My application is a filter and the problem was that I had two session factories. 我的应用程序是一个过滤器,问题是我有两个会话工厂。

My DAO was autowiring the wrong one. 我的DAO自动装错了。 To fix that, I added a @Qualifier to get the good one. 为了解决这个问题,我添加了一个@Qualifier来获得好的。

So I replaced that 所以我取而代之

@Autowired
protected SessionFactory sessionFactory;

with that 接着就,随即

@Autowired
@Qualifier("logSessionFactory")
protected SessionFactory sessionFactory;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM