Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 未映射实体_Hibernate_Spring Roo_Hibernate Mapping - Fatal编程技术网

Hibernate 未映射实体

Hibernate 未映射实体,hibernate,spring-roo,hibernate-mapping,Hibernate,Spring Roo,Hibernate Mapping,我使用SpringRoo来处理实体对象的休眠 但当运行单元测试时,它们失败了,因为它表示实体未映射: 以下是错误: QuerySyntaxException:未映射优惠券[从优惠券o中选择o] 位于org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) 这就是我的持久化单元的配置: <persistence-unit name="persiste

我使用SpringRoo来处理实体对象的休眠

但当运行单元测试时,它们失败了,因为它表示实体未映射:

以下是错误:

QuerySyntaxException:未映射优惠券[从优惠券o中选择o] 位于org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)

这就是我的持久化单元的配置:

<persistence-unit name="persistenceUnitTest" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.archive.autodetection" value="class"/>
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
        <property name="hibernate.connection.charSet" value="UTF-8"/>
    </properties>
</persistence-unit>
应用程序上下文设置为:

<context:component-scan base-package="com.tamiflu.entities">
    <context:exclude-filter expression=".*_Roo_.*" type="regex"/>
</context:component-scan>

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnitTest"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:tamiflu"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
    <property name="testOnBorrow" value="true"/>
    <property name="testOnReturn" value="true"/>
    <property name="testWhileIdle" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="1800000"/>
    <property name="numTestsPerEvictionRun" value="3"/>
    <property name="minEvictableIdleTimeMillis" value="1800000"/>
</bean>


我觉得一切都准备好了。我不知道为什么@RooEntity没有被选为映射对象。

Mikko Maunu是正确的,您的选择对于JPA不正确,正确的选择是从优惠券o中选择o

@RooJpaActiveRecord是Roo:1.2(目前在RC1中)即将发布的新注释,@Entity是Roo当前1.1.5和以前版本的注释

如果问题仍然存在,请执行以下操作:

  • 检查您的实体。Roo在AspectJ文件(.aj扩展名,类似于_Roo_Entity或_Roo_Jpa_ActiveRecord)中生成方法,但您可以将其移动(或推入)到Java文件中。查看find方法是否具有正确的语法(如Mikko Maunu所说,您必须使用实体的名称而不是表的名称)
  • 检查扫描的包裹。在应用程序上下文中查找context:component scan元素,并查看要加载的实体是否属于基本包的子包,即您的案例中的com.tamiflu.entities
  • 第二点需要注意:Roo创建代码,使用通配符加载应用程序上下文文件


    如果您有多个文件,请小心,因为无法保证顺序(如果您有多个不同包的文件要扫描,则在加载实体时会出现问题,除非您强制顺序删除通配符并手动指定applicationContext.xml文件的所需顺序)

    Mikko Maunu是正确的,您的选择对于JPA不正确,正确的选择是从优惠券o中选择o

    @RooJpaActiveRecord是Roo:1.2(目前在RC1中)即将发布的新注释,@Entity是Roo当前1.1.5和以前版本的注释

    如果问题仍然存在,请执行以下操作:

  • 检查您的实体。Roo在AspectJ文件(.aj扩展名,类似于_Roo_Entity或_Roo_Jpa_ActiveRecord)中生成方法,但您可以将其移动(或推入)到Java文件中。查看find方法是否具有正确的语法(如Mikko Maunu所说,您必须使用实体的名称而不是表的名称)
  • 检查扫描的包裹。在应用程序上下文中查找context:component scan元素,并查看要加载的实体是否属于基本包的子包,即您的案例中的com.tamiflu.entities
  • 第二点需要注意:Roo创建代码,使用通配符加载应用程序上下文文件

    如果有多个,请小心,因为不能保证顺序(如果要扫描多个具有不同包的文件,则在加载实体时会出现问题,除非您强制顺序删除通配符并手动指定applicationContext.xml文件的所需顺序)

    <context:component-scan base-package="com.tamiflu.entities">
        <context:exclude-filter expression=".*_Roo_.*" type="regex"/>
    </context:component-scan>
    
    <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    <tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>
    <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
        <property name="persistenceUnitName" value="persistenceUnitTest"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:mem:tamiflu"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
        <property name="testWhileIdle" value="true"/>
        <property name="timeBetweenEvictionRunsMillis" value="1800000"/>
        <property name="numTestsPerEvictionRun" value="3"/>
        <property name="minEvictableIdleTimeMillis" value="1800000"/>
    </bean>