Spring属性扩展在Entity中生成QuerySyntaxException

时间:2013-07-11 14:44:55

标签: spring hibernate java-ee spring-data-jpa kundera

我有一个带有spring 3.1.0,hibernate 4.0和jboss 7.1.1的应用程序

目标 - 动态扩展属性以加载持久性单元。

<bean id="propertyPlaceholder"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="searchSystemEnvironment" value="true" />
    <property name="locations">
        <list>
                <value> file:/${PROPERTY_HOME}/jpa/kundera_jpa.properties</value>  
        </list>
    </property>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" > 
    <property name="persistenceXmlLocation" value="classpath:./META-INF/persistence.xml"/> 
    <property name="persistenceUnitName" value="cassandra"/>
    <property  name="persistenceProvider" >
         <bean class="com.impetus.kundera.KunderaPersistence" />
    </property> 
    <property name="jpaProperties">
        <props>
        <prop key="kundera.nodes">${cassandra.kundera.nodes}</prop>
        <prop key="kundera.port">${cassandra.kundera.port}</prop>
        <prop key="kundera.keyspace">${cassandra.kundera.keyspace}</prop>
        <prop key="kundera.dialect">${cassandra.kundera.dialect}</prop>
        <prop key="kundera.client.lookup.class">${cassandra.kundera.client.lookup.class}</prop>
        <prop key="jboss.as.jpa.providerModule">com.impetus.kundera</prop>
        </props>
    </property>
</bean>

的persistence.xml

<persistence-unit name="cassandra">
        <properties> 
             <property name="jboss.as.jpa.managed" value="false"/> 
        </properties>   
</persistence-unit>

现在使用&#39; jboss.as.jpa.managed&#39; ,我正在停止jboss的休眠以自动加载cassandra单元。 我能够通过我的bean的上述定义成功加载属性。但是在运行时我的实体&#39; UsageItem&#39;正在生成以下异常

  

org.hibernate.hql.internal.ast.QuerySyntaxException:UsageItem未映射

但奇怪的是,如果我手动硬编码persistence.xml中的属性 -

,相同的代码正在运行
<persistence-unit name="cassandra">
    <provider>com.impetus.kundera.KunderaPersistence</provider>
     <properties>
        <property name="kundera.nodes" value="172.16.9.70" />
        <property name="kundera.port" value="9160" /> 
        <property name="kundera.keyspace" value="iaas" />
        <property name="kundera.dialect" value="cassandra" />
        <property name="kundera.client.lookup.class" value="com.example.client.cassandra.pelops.JCPelopsClientFactory" />
        <property name="jboss.as.jpa.providerModule" value="com.impetus.kundera"/>          
    </properties>
</persistence-unit>

当我在上面的persistence.xml中进行硬编码时,我说 hibernate 加载Persistence-unit,他操作完全正常。 我认为spring无法加载我的实体的元数据&#39; UsageItem&#39;我不知道春天我错过了什么不允许我继续前进。 现在一周但仍然坚持。

1 个答案:

答案 0 :(得分:0)

看起来你正在尝试使用Kundera作为JBoss的持久性提供程序?

我建议尝试使用“jboss.as.jpa.managed”的最新2.6版本为false。创建jboss模块无济于事,它需要打包一些库并捆绑模块。

此外,如果根据Kundera的要求使用@Table注释正确注释UsageItem,它应该可以工作。

-Vivek