RooEntity не отображается - PullRequest
       9

RooEntity не отображается

2 голосов
/ 01 декабря 2011

Я использую SpringRoo для обработки Hibernation моих объектов.

Но при запуске модульных тестов они терпят неудачу, потому что это говорит о том, что объект не отображается:

Вотошибка:

QuerySyntaxException: COUPON не отображается [ВЫБРАТЬ 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>

Вот как определяется моя сущность:

@RooJavaBean
@RooToString
@RooEntity(identifierColumn = "COUPONID", identifierType = Integer.class, table = "COUPON")
public class Coupon {

Установлен контекст приложения:

<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>

Iчувствую, что у меня все на месте.Я не знаю, почему @RooEntity не воспринимается как отображаемое.

1 Ответ

0 голосов
/ 12 декабря 2011

Микко Мауну прав, ваш SELECT не подходит для JPA, правильный SELECT o FROM Coupon o.

@ RooJpaActiveRecord - это новая аннотация для входящего выпуска Roo: 1.2 (в настоящее время в RC1), а @Entity - для текущей версии 1.1.5 и предыдущих версий Roo.

Если проблема сохраняется:

  1. Пересмотрите свою сущность. Roo генерирует метод в файле AspectJ (расширение .aj, что-то вроде _Roo_Entity или _Roo_Jpa_ActiveRecord), но вы можете переместить (или вставить его) в файл Java. Посмотрите, имеет ли метод поиска правильный синтаксис (вы должны использовать имя сущности вместо имени таблицы, как сказал Микко Мауну)
  2. Просмотр отсканированных пакетов. Найдите в своем applicationContext элемент context: component-scan и посмотрите, принадлежит ли объект, который вы хотите загрузить, к подпакету базового пакета, com.tamiflu.entities в вашем случае.

Примечание ко второму пункту: Roo создает код, который загружает файлы контекста приложения с использованием подстановочных знаков.

Будьте осторожны, если у вас их больше одного, потому что порядок не гарантирован (если у вас есть несколько файлов с разными пакетами для сканирования, у вас будут проблемы с загрузкой сущностей, если вы не заставите порядок удалить групповые символы и вручную указать желаемый порядок для файлов applicationContext.xml)

...