2009-11-01 14 views
12

मैं हाइबरनेट एनोटेशन का उपयोग कर के साथ वसंत गठबंधन करने के लिए कोशिश कर रहा हूँ और मैं निम्नलिखित त्रुटि हो रही है:स्प्रिंग + हाइबरनेट = अज्ञात इकाई

org.springframework.orm.hibernate3.HibernateSystemException : Unknown entity: entities.Bar; nested exception is org.hibernate.MappingException: Unknown entity: entities.Bar 

यहाँ मेरी सेटअप है ...

मेरे निकाय:

package entities; 

@Entity  
public class Bar implements Serializable 
{ 
    ... 
} 

मेरे बीन:

package blah; 

@Repository 
@Service("fooService") 
@RemotingDestination(channels = { "my-amf" }) 
public class Foo 
{ 
    protected HibernateTemplate template; 

    @Autowired 
    public void setSessionFactory(SessionFactory sessionFactory) 
    { 
    template = new HibernateTemplate(sessionFactory); 
    } 

    @RemotingInclude 
    public void addBar(String name) throws DataAccessException 
    { 
    Bar bar = new Bar(); 
    bar.setName(name); 
    template.save(bar); 
    } 

}

मैं वसंत में एनोटेशन सक्षम करने हूँ:

<context:annotation-config /> 
<context:component-scan base-package="blah" /> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.h2.Driver" /> 
    <property name="url" value="jdbc:h2:~/blahdb/blahdb" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>entities.Bar</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

मैं त्रुटि मिलती है जब मैं BlazeDS के माध्यम से एक फ्लेक्स आवेदन से मेरी Foo.addBar विधि कॉल।

मैं वास्तव में अतिरिक्त कॉन्फ़िगरेशन से बचना चाहता हूं और ऐसा लगता है कि यह सब काम करना चाहिए।

मैं वसंत 3.0.0.आरसी 1, हाइबरनेट एनोटेशन 3.4.0, टोमकैट 6.0.20, और जावा 1.6.0_15 का उपयोग कर रहा हूं।

कोई विचार? धन्यवाद।

+0

एक मानचित्रण अपवाद की तरह लग रहा है, लेकिन आप स्पष्ट रूप से 'है Bar' मैप किया, मैं किसी भी गलत वर्तनी की जाँच करेगा और फिर देखें कि वह अपने हाइबरनेट जार संगत कर रहे हैं (संगतता मैट्रिक्स के साथ) और स्प्रिंग 3. –

+0

मैं के साथ संगत मैं स्प्रिंग 3.0.0 का उपयोग कर सफलतापूर्वक उपयोग कर रहा हूं। एचसीनेट के साथ आरसी 1: कोर 3.3.2.जीए, एनोटेशन 3.4.0.जीए। तो निश्चित रूप से वे एक साथ काम करते हैं। –

+1

जेम्स, अगर आप मुझे अपने प्रोजेक्ट के प्रासंगिक हिस्सों को ई-मेल करना चाहते हैं, तो मुझे अपनी खुद की कामकाजी परियोजना के साथ एक नज़र डालने और इसकी तुलना करने में खुशी होगी, जैसा कि मैंने कहा है। मेरा ई-मेल पता उस Google ई-मेल सेवा पर संक्षिप्त ('विली', '।', 'व्हीलर') है ... :-) –

उत्तर

31

import @javax.persistence.Entity का उपयोग करने का प्रयास करें और एनोटेशन के लिए org.hibernate.annotations.Entity का उपयोग करने का प्रयास करें।

+1

ओएमजी! आपने धमाल मचाया। वह पूरी तरह से था। मैं इसे पकड़ने के लिए इतना लंगड़ा महसूस करता हूँ। और यहां तक ​​कि लमर भी है कि मैंने ऊपर दिए गए कोड में आयात भी शामिल नहीं किया क्योंकि मुझे नहीं लगता कि यह समस्या होगी। –

+2

बहुत बढ़िया। 300 प्रतिष्ठा अंक! –

1

सुनिश्चित करें कि आप अपने स्प्रिंग एप्लिकेशन संदर्भ एक्सएमएल के लिए उचित नामस्थान जोड़ दिया है:

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

मेरे पास पहले से ही हैं। हालांकि धन्यवाद। –

1

केवल एक चीज मैं के बारे में सोच सकते हैं कि किसी तरह अपने annotatedClasses परिभाषा प्रश्न में इकाई याद आ रही है है। क्या आप पैकेज नामों सहित अपने एनोटेटेड क्लास डीफ़ को दोबारा जांच सकते हैं?

क्या मैं यह सोचने में सही हूं कि यह त्रुटि स्टार्टअप पर आ रही है? क्या आप त्रुटि संदेश के आसपास के कुछ और संदर्भ शामिल कर सकते हैं?

2009-11-01 10:05:55.593::WARN: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invo 
cation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.springinpractice.ch06.model.Message.forum references an unknown entity: com.springinpractice.ch06.model. 
Forum: 
org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.springinpractice.ch06.model.Message.forum references an unknown entity: com.springinpractice.ch06.model.Forum 
     at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:81) 
     at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:456) 

[स्निप]

संपादित करें: एक और सवाल/विचार उदाहरण के लिए, मैं तुम्हें क्या मेरी annotatedClasses परिभाषा से वर्गों में से एक को हटाने के द्वारा रिपोर्ट कर रहे हैं करने के लिए कुछ इसी तरह पुन: पेश करने में सक्षम था। क्या आपके पास रनटाइम क्लासपाथ पर उचित एनोटेशन जार (या तो जेपीए या हाइबरनेट एनोटेशन जेएआर के लिए persistence.jar) है?

एक और संपादित: एक और। आप क्या जेवीएम संस्करण चल रहे हैं?

+0

धन्यवाद विली इस के साथ मेरी मदद करने के लिए। मैंने प्रश्न को और संस्करण संख्याओं के साथ अद्यतन किया है। मेरे वेब-आईएनएफ/lib में मेरे पास हाइबरनेट एनोटेशन जेएआर है। –

5

मैं एक ही समस्या का सामना किया है और इस

मेरे लिए हठ में मेरी इकाई वर्गों घोषित करने के लिए था क्या काम के लिए किसी भी अच्छा जवाब नहीं मिला।xml फ़ाइल

(संसाधनों के तहत और के तहत दोनों टेस्ट):

<persistence ...> 
    <persistence-unit ...> 

     <class>com.company.maenad.core.model.News</class> 
     <class>com.company.maenad.core.model.AdExtraInfo</class> 

    </persistence-unit> 
</persistence> 
2

ऊपर उल्लेख किया अपवाद भी अगर annotatedClasses संपत्ति sessionFactory कॉन्फ़िगर करने के लिए इस्तेमाल किया पैकेज में सही संस्थाओं की ओर इशारा नहीं कर रहे हैं occours।

एनोटेटेड क्लास के बजाय संपत्ति पैकेजों का उपयोग करने के लिए सलाह दी जाती है क्योंकि यह संस्थाओं के लिए पूरे पैकेज को स्कैन करता है, इस प्रकार पूरी तरह से योग्य वर्ग नामों के साथ संस्थाओं का स्पष्ट उल्लेख से बचाता है।

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
<property name="dataSource" ref="dataSource"></property> 
<property name="packagesToScan" value="com.code.entity"></property> 
<property name="hibernateProperties"> 
<props> 
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
    <prop key="hbm2ddl.auto">update</prop> 
    <prop key="hibernate.show_sql">true</prop> 
</props> 
</property> 

1

मुझे लगता है कि स्पष्ट रूप से entites के पैकेज लेखन सुरक्षित है। मुझे यह त्रुटि मिली है और EntityScan एनोटेशन का उपयोग कर हल करें।

@EntityScan(basePackages = "your.entities.pakage") 
संबंधित मुद्दे