2011-12-02 20 views
7

में लक्ष्य इकाई के रूप में उपयोग करती है, मैं अपने Department और Mandator कक्षाओं को hsqhldb पर जारी रखने का प्रयास करता हूं लेकिन यह यह त्रुटि देता है।जेपीए त्रुटि एक गैर-इकाई [वर्ग ch.printsoft.mailhouse.usermgr.entity.Department] रिलेशनशिप विशेषता

Exception Description: [class ch.printsoft.mailhouse.usermgr.entity.Mandator] uses a non-entity [class ch.printsoft.mailhouse.usermgr.entity.Department] as target entity in the relationship attribute [field departments]. 
at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126) 
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:115) 
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source) 
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source) 

ये वे वर्ग हैं जिन्हें मैं अपने डेटाबेस में जारी रखने की कोशिश करता हूं। मैं वास्तव में नहीं जानता कि समस्या क्या है।

@Entity 
public class Mandator { 
    @Id 
    @GeneratedValue 
    private Integer id; 
    private String mandatorId; 
    @OneToMany(mappedBy = "mandator") 
    private List<MandatorUser> mandatorUsers; 
    @OneToMany(mappedBy = "mandator") 
    private List<SLAFamilyGroup> slaFamilyGroups; 
    @OneToMany(mappedBy = "mandator") 
    private List<Group> groups; 
    @OneToMany(mappedBy = "mandator") 
    private List<Department> departments; 
    @OneToMany(mappedBy = "mandator") 
    private List<CostUnit> costUnits; 



@Entity 
    public class Department { 
    @Id 
    @GeneratedValue 
    private Integer id; 
    private String name; 
    private String responsiblePerson; 
    private String location; 

    @ManyToOne(optional = false) 
    private Mandator mandator; 
    @ManyToMany 
    private List<DocumentUser> documentUsers; 

मैंने वास्तव में हर चीज की कोशिश की है लेकिन यह काम नहीं किया है।

उत्तर

1

Mandator वर्ग से @OneToMany व्याख्याओं से होने mappedBy निकालें

चेक सभी संबंधित वर्गों @Entity के रूप में उल्लेख किया जाता है, तो। डिपार्टमेंट क्लास में @UanyToManyer दस्तावेज़ से संबंधित है। DocumentUser क्लास

+0

ठीक है .. इसे बहुत धन्यवाद –

+0

अपवाद विवरण: [वर्ग ch.printsoft.mailhouse.usermgr.entity.Mandator] एक गैर-इकाई [वर्ग ch.printsoft.mailhouse.usermgr.entity.Department] का उपयोग करता है संबंध विशेषता [क्षेत्र विभाग] में लक्षित इकाई। –

+0

विभाग वर्ग से "वैकल्पिक = झूठी" को @ManyToOn एनोटेशन से हटाएं – WeMakeSoftware

31

की सूची प्रदान करें सुनिश्चित करें कि आपके पास अपनी persistence.xml में दोनों कक्षाएं सूचीबद्ध हैं, और दोनों कक्षाएं क्लासपाथ पर हैं।

कृपया अपना persistence.xml शामिल करें।

+0

धन्यवाद। मैंने चीजों को चारों ओर ले जाया और यह जांचने के लिए भूल गया कि मेरा persistence.xml अपडेट हो गया है। इसे जांचें, भले ही आपको लगता है कि यह सही है! :-) – woot

0

सुनिश्चित करें कि दोनों "कक्षा" फ़ाइलें एक ही जार में हैं। सुनिश्चित करें कि आपके पास एक ही नाम के साथ दो .class फ़ाइलें नहीं हैं!

0

सुनिश्चित करें कि आपके पास दोनों वर्गों में पीके की संपत्ति है और कोई पैरामीटर कन्स्ट्रक्टर नहीं है। मैं अपनी इकाई वर्ग में निम्न कोड जोड़ता हूं।

@Entity 
public class EntityClass{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    public int id; 
    public EntityClass() { 
    } 
    ... 
} 
0

अपने mappedBy=xxx की जांच करना और यह सुनिश्चित करें xxx पूरी परियोजना में अद्वितीय है बनाते हैं।

18

मैंने इस अपवाद के एक प्रतीत होता है कि यह अपरिहार्य मामला डीबग करने में काफी समय बिताया है, इसलिए मैं अपनी कहानी यहां छोड़ रहा हूं।

आप जेपीए के कुछ पुराने कार्यान्वयन उपयोग कर रहे हैं (उदाहरण के लिए EclipseLink 2.5.x) और आप अपने कोड बेस में (जैसे लैम्ब्डा अभिव्यक्ति के रूप में) आधुनिक जावा 8 सुविधाओं का उपयोग कर रहे हैं - नहीं कभी उन्हें इस्तेमाल जेपीए इकाई कक्षाओं में।

ग्रहण लिंक 2.5 वर्ग की मेटाडाटा पार्सर बाइटकोड में जावा 8 फीचर्स (जैसे लैम्ब्डा एक्सप्रेशन, विधि संदर्भ इत्यादि) का सामना करने पर दुर्घटनाग्रस्त हो जाता है। आंतरिक क्रैश एक बहुत ही असभ्य ArrayIndexOutOfBoundsException है, लेकिन आप इसे देखने के लिए भी नहीं देखते हैं, क्योंकि वीवर कोड चुपचाप मेटाडाटा पार्सर क्रैश को अनदेखा करता है और मानता है कि कक्षा में कोई रोचक मेटाडेटा नहीं है। इससे यह विश्वास होता है कि प्रश्न में वर्ग एक इकाई नहीं है, भले ही इसमें सभी उचित टिप्पणियां हों, और अंतिम परिणाम वह त्रुटि संदेश है जिसके बारे में हम बात कर रहे हैं।

नीचे पंक्ति: जेपीए इकाई कक्षाओं में जावा 8 लैम्बडा का उपयोग न करें। कभी।

+1

परीक्षण और सटीक उसी प्रोब में चलाएं! BOTTOM-line के लिए Thx जो प्रोब तय करता है: -/ – LeO

+1

लेकिन ग्रहण लिंक 2.6.4 ने इस समस्या को ठीक कर दिया है और अब जेपीए लैम्बडास के साथ बहुत अच्छा काम करता है !! कम से कम सामान मैंने परीक्षण किया है ;-) – LeO

+0

धन्यवाद kFYatek! मेरे मामले में, एक इकाई को जेपीए (ठीक लॉग में !!) से किसी भी चेतावनी के बिना अनदेखा किया गया था और फिर इस अनदेखी इकाई पर एक @OneToMany पर इशारा करते हुए, जेपीए ने एक अपवाद फेंक दिया "इकाई ए एक गैर-इकाई बी का उपयोग करता है (अनदेखा एक) ... अंधेरे बादल में 1 घंटा कैसे खोना .......: पी मेरी एंटीटी बी में एक छोटी भेड़ का बच्चा अभिव्यक्ति खो गया :) इसे बदलने के बाद, सब ठीक है! – Elloco

1

मुझे उम्मीद है कि यह किसी की मदद कर सकता है।

मुझे एक ही समस्या थी। रात पहले, सबकुछ ठीक था। नेटबीन में मैंने इतिहास का उपयोग करके, त्रुटि में शामिल सभी फाइलों की जांच की है। Persistence.xml शामिल थे। कुछ भी नहीं बदला गया था।

मैंने मैन्युअल रूप से भी जांच की है। मैंने इस धागे में सुझाए गए सभी समाधानों को भी eclipselink 2.6.4 पर माइग्रेट करने का प्रयास किया है। मैंने persistence.xml में शामिल 2 कक्षा को हटा दिया है, इसे सहेजा है, और फिर से जोड़ा गया है। त्रुटि अभी भी वहां थी।

फिर, मैंने persistence.xml में शामिल इकाई वर्गों की सूची में सभी वर्गों को हटा दिया है, और फिर मैंने उन्हें फिर से शामिल किया है।

अब यह काम करता है। जादुई रूप से।

लेकिन वास्तव में इतिहास में कोई अंतर नहीं था। यहां तक ​​कि एक भी चरित्र।

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