Свойство packagesToScan в LocalContainerEntityManagerFactoryBean не работает

HI У меня есть приложение, в котором я пытаюсь создать LocalContainerEntityManagerFactoryBean для cassandra... У меня также есть несколько объектов, которые отображаются и управляются спящим режимом, и которые не следует сканировать из этого EMF...

Я добавил свойство pakagesToScan в LocalContainerEntityManagerFactoryBean, но он все еще пытается сканировать все пакеты...

Мой Spring xml выглядит следующим образом...

<bean id="cassandraEmf"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="cassandra" />
        <property name="loadTimeWeaver">
            <bean
                class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
        </property>
        <property name="packagesToScan">
            <array value-type="java.lang.String">
                <value>org.amaze.db.usage.objects</value>
            </array>
        </property>
    </bean>

Мой Persistence.xml выглядит следующим образом

<persistence-unit name="cassandra">
    <provider>com.impetus.kundera.KunderaPersistence</provider>
        <properties>
            <property name="kundera.nodes" value="localhost"/>
            <property name="kundera.port" value="9160"/>
            <property name="kundera.keyspace" value="amaze"/>
            <property name="kundera.dialect" value="cassandra"/>
            <property name="kundera.client.lookup.class" value="com.impetus.client.cassandra.pelops.PelopsClientFactory" />
            <property name="kundera.cache.provider.class" value="com.impetus.kundera.cache.ehcache.EhCacheProvider"/>
            <property name="kundera.cache.config.resource" value="/ehcache-test.xml"/>
            <property name="packagesToScan" value="org.amaze.db.usage.objects" />
        </properties>
    </persistence-unit>

Ошибка, которую я получаю, выглядит следующим образом:

Caused by: com.impetus.kundera.metadata.validator.InvalidEntityDefinitionException: Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraEmf' defined in class path resource [dbusage.xml]: Invocation of init method failed; nested exception is com.impetus.kundera.metadata.validator.InvalidEntityDefinitionException: org.amaze.db.hibernate.objects.Application must have an @Id field.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at org.amaze.db.KunderaTest.main(KunderaTest.java:14)
Caused by: com.impetus.kundera.metadata.validator.InvalidEntityDefinitionException: org.amaze.db.hibernate.objects.Application must have an @Id field.
    at com.impetus.kundera.metadata.processor.TableProcessor.validateIdAttribute(TableProcessor.java:415)
    at com.impetus.kundera.metadata.processor.TableProcessor.validateAndSetId(TableProcessor.java:405)
    at com.impetus.kundera.metadata.processor.TableProcessor.populateMetadata(TableProcessor.java:155)
    at com.impetus.kundera.metadata.processor.TableProcessor.process(TableProcessor.java:90)
    at com.impetus.kundera.metadata.MetadataBuilder.buildEntityMetadata(MetadataBuilder.java:132)
    at com.impetus.kundera.configure.MetamodelConfiguration.scanClassAndPutMetadata(MetamodelConfiguration.java:398)
    at com.impetus.kundera.configure.MetamodelConfiguration.loadEntityMetadata(MetamodelConfiguration.java:232)
    at com.impetus.kundera.configure.MetamodelConfiguration.configure(MetamodelConfiguration.java:103)
    at com.impetus.kundera.configure.Configurator.configure(Configurator.java:65)
    at com.impetus.kundera.KunderaPersistence.initializeKundera(KunderaPersistence.java:109)
    at com.impetus.kundera.KunderaPersistence.createEntityManagerFactory(KunderaPersistence.java:81)
    at com.impetus.kundera.KunderaPersistence.createContainerEntityManagerFactory(KunderaPersistence.java:65)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:341)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)

Я не могу решить эту проблему. Я пытаюсь использовать подстановочный знак с именем пакета org.amaze.db.usage.objects.*, но не помогает...

Я использую весну 4.1.1....

Заранее спасибо...


person Praneeth Ramesh    schedule 05.12.2014    source источник


Ответы (1)


Stacktrace показывает, что объект Application (я предполагаю, что это Hibernate POJO) должен иметь свойство с аннотацией @Id. Это поле важно, так как оно обозначает ключевое свойство, которое будет использоваться для поиска объекта в хранилище данных.

Следующий пример кода с Kundera показывает этот пример. https://code.google.com/p/kundera/wiki/HowToUseKunderaWithSpring

person blackpanther    schedule 05.12.2014
comment
Привет, друг.... Спасибо за ответ... Это правда... его спящий объект у меня есть в другом пакете... Я не хочу, чтобы JPA сканировал эти классы.. Я хочу загружать только объекты в пакете org .amaze.db.usage.objects, а не какие-либо другие.. Для этой цели я добавил ‹property name=packagesToScan value=org.amaze.db.usage.objects /› в сохраняемый xml.. Но не знаю, почему он все еще ищет для классов в других пакетах... - person Praneeth Ramesh; 05.12.2014