【问题标题】:LocalSessionFactoryBean packagesToScan not working with multiple valuesLocalSessionFactoryBean packagesToScan 不能使用多个值
【发布时间】:2019-04-13 19:52:47
【问题描述】:

我正在学习 Hibernate 和 Spring。我有多个实体类。下面是我项目的目录结构:

这里的LoginUser 和Student 是用@Entity 注释的两个实体。我已经在dispatcher-servlet.xml 文件中配置了org.springframework.orm.hibernate4.LocalSessionFactoryBean

<beans:bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="packagesToScan" value="com.sachin.onlineexam.login.entity"></beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</beans:prop>
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
            </beans:props>
        </beans:property>


    </beans:bean>

通过这种配置,我可以将LoginUser 实例保存在数据库中。但是当我为 packagesToScan 属性设置多个值时,它会给出一个异常 org.hibernate.MappingException: Unknown entity: com.sachin.onlineexam.login.entity.LoginUser
这是packagesToScan的多个(数组)值的配置

<beans:bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="packagesToScan">
            <beans:array>
                <beans:value>
                    com.sachin.onlineexam.login.entity
                </beans:value>
                <beans:value>
                    com.sachin.onlineexam.student.entity
                </beans:value>
            </beans:array>

        </beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect
                </beans:prop>
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
            </beans:props>
        </beans:property>

    </beans:bean>

问题:当packagesToScan 配置为&lt;beans:property name="packagesToScan" value = "com.sachin.onlineexam.login.LoginUser/&gt; 的单个包值时,我的应用程序工作FINE 并且数据存储在数据库中。但是当它被配置为&lt;beans:array&gt;&lt;beans:value&gt;...&lt;/beans:value&gt;&lt;/beans:array&gt; 或&lt;beans:list&gt;...&lt;/beans:list&gt; 时,上面的exception 就会被抛出。在 &lt;beans:array&gt;&lt;/beans:array&gt; 标记内提供多个值也 Not Work 并给出相同的异常。

是packagesToScan 属性的问题还是其他问题?

注意:我使用的是休眠 4 版本 4.2.11 和 Spring 4 版本 4.3.23。我也尝试过使用 hibernate 5 和 spring 5,但不工作。

【问题讨论】:

  • 使用现代基于 java 的配置,而不是旧的 xml base d
  • 但它也应该适用于 xml 配置...
  • 只需在value 元素中使用, 分隔值。你把事情弄得太复杂了。 `value="com.sachin.onlineexam.login.entity,com.sachin.onlineexam.student.entity"。 Spring 会自动转换这个。
  • 成功了.....你可以给出答案,这样我就可以信任你了

标签: java spring hibernate spring-mvc orm


【解决方案1】:

尝试在集合标签上指定value-type:

   <beans:property name="packagesToScan">
        <beans:list value-type="java.lang.String">
            <beans:value>
                com.sachin.onlineexam.login.entity
            </beans:value>
        </beans:list>
    </beans:property>

或

   <beans:property name="packagesToScan">
        <beans:array value-type="java.lang.String">
            <beans:value>
                com.sachin.onlineexam.login.entity
            </beans:value>
        </beans:array>
    </beans:property>

【讨论】:

    【解决方案2】:

    如下使用

    <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="packagesToScan">
            <array>
                <value>com.erp</value>
                <value>com.bea</value>
            </array>
        </property>
    </bean>
    

    【讨论】:

    • 这与问题中的代码完全一样,没有前缀。显然涉及到命名空间,beans 不是默认命名空间。
    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多