2012-06-03 13 views
12

मैंने वसंत डेटा जेपीए नमूना परियोजना बनाई है। मैंने इसके लिए ग्रहण किया। दो परियोजनाएं हैं, एक डोमेन ऑब्जेक्ट प्रोजेक्ट है जिसमें केवल इकाई वर्गों को एनोटेट किया गया है। अन्य परियोजना वास्तविक वसंत डेटा जेपीए परियोजना है और इसकी परियोजना के लिए निर्भरता है। असल में यह मैवेन निर्भरता के माध्यम से डोमेन प्रोजेक्ट इकाई कक्षाएं प्राप्त करता है।वसंत डेटा जेपीए java.lang.IleglegalArgumentException: एक इकाई नहीं

परियोजना 1: मानव संसाधन विकास मंत्री-डोमेन

इकाई वर्ग:

package com.hrm.ws.data.domain; 

import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Inheritance; 
import javax.persistence.InheritanceType; 
import javax.persistence.Table; 



@Entity(name = "Employee") 
@Table(name = "employee") 
@Inheritance(strategy = InheritanceType.JOINED) 
public class Employee { 

    protected long id; 

    protected String firstName; 

    protected String lastName; 

    /** 
    * Gets the value of the id property. 
    * 
    */ 
    @Id 
    @Column(name = "id", scale = 0) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public long getId() { 
     return id; 
    } 

परियोजना 2: मानव संसाधन विकास मंत्री-WS-सेवा

हठ-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 

     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/data/jpa 
          http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 


     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
      <property name="driverClassName" value="${jdbc.driverClassName}"/> 
      <property name="url" value="${jdbc.url}"/> 
      <property name="username" value="${jdbc.username}"/> 
      <property name="password" value="${jdbc.password}"/> 
     </bean> 

     <jpa:repositories base-package="com.hrm.ws.data.repository" /> 


     <bean id="employeeDao" class="com.hrm.ws.data.repository.EmployeeRepositoryImpl"/>  


     <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> 

       <property name="entityManagerFactory" ref="entityManagerFactory" /> 
       <property name="jpaDialect"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
       </property> 

     </bean> 

     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 

       <property name="dataSource" ref="dataSource" /> 

       <property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
        <property name="generateDdl" value="${jdbc.generateDdl}" /> 
        <property name="showSql" value="${jdbc.showSql}"/> 
       </bean> 
       </property> 
       <property name="persistenceUnitName" value="jpa.sample" /> 

     </bean> 

</beans> 

तो मेरे पैकेज के लिए सेटअप निम्नानुसार है:

src/मुख्य/जावा -

src/मुख्य/संसाधन शामिल होते हैं वसंत भंडार - आवेदन संदर्भ

src/परीक्षण/जावा शामिल हैं - इकाई परीक्षण

और परियोजना 1 के लिए निर्भरता शामिल (मानव संसाधन विकास मंत्री -domain)

मेरे समस्या है जब मैं इस परियोजना मैं त्रुटि हो रही है के रूप में निम्नानुसार चलाएँ:

... 38 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Not an entity: class com.hrm.ws.data.domain.Employee 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1429) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474) 
    ... 40 more 


**Caused by: java.lang.IllegalArgumentException: Not an entity: class** com.hrm.ws.data.domain.Employee 
    at org.hibernate.ejb.metamodel.MetamodelImpl.entity(MetamodelImpl.java:160) 
    at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:52) 
    at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:61) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:83) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:66) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:146) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:120) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:39) 
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) 
    ... 48 more 

मैं इस मुद्दे के बारे में सोच रहा हूं, क्योंकि जब मैं अपने वसंत प्रोजेक्ट में डोमेन ऑब्जेक्ट (कर्मचारी.जावा) डालता हूं तो यह स्वयं अलग जार है, यह ठीक काम करता है। यह मुद्दा केवल एक अलग जार के रूप में देता है। अगर किसी के पास परिदृश्य के बारे में अनुभव है तो कृपया मुझे मदद दें।

+0

यह नमूना से अदृश्य है, लेकिन क्या कर्मचारी के पास एक निर्माता है? – Dewfy

+2

कृपया, 'persistence.xml' की सामग्री प्रदान करें। दृढ़ता इकाई नाम 'jpa.sample', बीन इकाई प्रबंधक गैलरी में, क्या यह सही है? – elias

+0

मुझे भी वही समस्या है, क्या आप यह समझ सकते हैं कि समस्या क्या थी? मेरी परियोजना में एक अलग मैवेन जेपीए-फेस परियोजना (जिसे मेवेन वसंत आधारित परियोजना से संदर्भित किया गया है) में एनोटेटेड कक्षाएं हैं – higuaro

उत्तर

1

आप @Entity के साथ एनोटेटेड बीन्स के लिए com.hrm.ws.data.domain पैकेज स्कैन नहीं कर रहे हैं, इसलिए वसंत कंटेनर को आपकी संस्थाओं का कोई ज्ञान नहीं है और इसलिए अपवाद उत्पन्न करना है। अपने हठ-context.xml कॉन्फ़िग फ़ाइल में निम्नलिखित पंक्तियां जोड़ें:

<context:annotation-config /> 
<context:component-scan base-package="com.hrm.ws.data.domain" /> 

तुम भी इस प्रकार यह इतना संदर्भ तत्वों पहचाने जाते हैं अपनी जड़ XML तत्व को बदलना होगा:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/data/jpa 
          http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

और , यदि आपके पास पहले से नहीं है, तो अपनी पोम फ़ाइल में वसंत-संदर्भ निर्भरता जोड़ें।

+0

मुझे भी वही समस्या है, अगर इकाई एनोटेटेड कक्षाएं दूसरे में हों तो क्या होगा मेवेन प्रोजेक्ट (निश्चित रूप से वसंत आधारित परियोजना से संदर्भित है)? मैंने जो कहा वह मैं करता हूं लेकिन मुझे वही त्रुटि मिलती है जैसे @ हाशिथा करता है ... यह और क्या हो सकता है? – higuaro

+0

संस्थाओं के साथ मेवेन प्रोजेक्ट को अपने स्वयं के संदर्भ को परिभाषित करना चाहिए और उन संकुलों को स्कैन करना चाहिए जहां एनोटेटेड इकाइयां मौजूद हैं। दूसरी परियोजना (संस्थाओं के साथ एक का उपभोक्ता, जो मैं मान रहा हूं वह एक मुख्य परियोजना है?) वसंत xml फ़ाइल आयात करके अन्य संदर्भ का संदर्भ लेना चाहिए। यह कैसे करें इस पर एक उदाहरण दिया गया है: http://www.mkyong.com/spring3/spring-3-javaconfig-import-example/। उस ने कहा, यह कहना मुश्किल है कि कोड को देखे बिना वास्तव में क्या चल रहा है। – threejeez

6

मुझे भी यही समस्या थी। मेरा था कि मैंने entityManagerFactory बीन में packagesToScan संपत्ति की आपूर्ति नहीं की थी, इसलिए वसंत संस्थाओं को लोड नहीं कर सका। अपने वसंत विन्यास xml में emf बीन घोषणा देखें।

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
    </property> 
    <property name="packagesToScan" value="com.hrm.ws.data.domain" /> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
    </property> 
</bean> 
+0

मेरे पास वसंत xml कॉन्फ़िगरेशन फ़ाइल नहीं है क्योंकि मैं विशेष रूप से अपने बीन कॉन्फ़िगरेशन के लिए एनोटेशन का उपयोग कर रहा हूं। क्या 5.2.2 हाइबरनेट के साथ एनोटेशन का उपयोग करके ऐसा करने का कोई तरीका है? – nzhenry

0

उपयोग निम्न विकल्प में से एक: निम्नलिखित एक EMF घोषणा मुझे आशा है कि यह त्रुटि छुटकारा पाने के लिए तुम्हारी मदद कर सकता है -

  1. संदर्भ: घटक स्कैन आधार पैकेज = वसंत में "आपका बेस पैकेज नाम"।xml फ़ाइल

  2. entityManagerFactory

  3. उपयोग persistence.xml और सूची वहाँ सभी संस्थाओं पर packagesToScan गुण सेट।

संबंधित मुद्दे