2015-07-14 3 views
1

Я только начал работать с Spring ROO, и я сгенерировал классы сущностей, используя команду обратного инженерного баз данных. Однако всякий раз, когда я пытаюсь вызвать один из методов CRUD в сгенерированном классе сущностей, я все время получаю это исключение: java.lang.IllegalStateException: Администратор сущности не был введен (это JAR Spring Aspects, сконфигурированный как AJC/AJDT аспекты библиотека?)Администратор сущности не был введен

Я подозреваю (глядя на сгенерированные файлы), что EntityManager не был введен в класс. Пожалуйста, не могли бы вы рассказать мне, какую конфигурацию мне не хватает?

Вот что мой applicationContext.xml выглядит

<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/> 
<context:spring-configured/> 
<context:component-scan base-package="com.lennartz"> 
    <context:exclude-filter expression=".*_Roo_.*" type="regex"/> 
    <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> 
</context:component-scan> 
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> 
    <property name="driverClassName" value="${database.driverClassName}"/> 
    <property name="url" value="${database.url}"/> 
    <property name="username" value="${database.username}"/> 
    <property name="password" value="${database.password}"/> 
    <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"/> 
    <property name="validationQuery" value="SELECT 1 FROM DUAL"/> 
</bean> 
<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="persistenceUnit"/> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

И генерируемый объект файлы

privileged aspect UserDetail_Roo_Jpa_ActiveRecord { 

@PersistenceContext 
transient EntityManager UserDetail.entityManager; 

public static final EntityManager UserDetail.entityManager() { 
    EntityManager em = new UserDetail().entityManager; 
    if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)"); 
    return em; 
} 

Пожалуйста, дайте мне знать, если есть что-то я пропускаю.

+0

Сканирование вашего компонента исключает любой класс, содержащий «_Roo_», поэтому Spring не собирается сканировать ваш класс 'UserDetail_Roo_Jpa_ActiveRecord'. – DuncanKinnear

+0

Спасибо за ответ. Я попытался удалить это, но я все еще получаю ту же ошибку. – Imoh

ответ

1

Вы не должны изменять файлы .aj, чтобы настроить РОО сгенерированный код чтения http://docs.spring.io/spring-roo/docs/2.0.0.M1/reference/html/#edit-modify-and-customize-the-roo-generated-code

+0

Спасибо за ответ. Я не изменяю файлы, созданные Roo. Я только изменил файл applicationContext, и я все равно получаю ту же ошибку. – Imoh

+0

Не могли бы вы приложить резервную копию проекта? – eruiz

0

В конце концов я понял, проблема, кажется, контекст не инициализируется в моем приложении. я добавил следующую строку в моей web.xml, и она работала

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value> 
</context-param> 

Если ваше приложение не является веб-приложение, я предполагаю, что инициализирует контекст использования ClassPathXmlApplicationContext должен работать для вас.

Смежные вопросы