2011-10-25 6 views
6

मैं हाइबरनेट के लिए नया हूं। इसे का उपयोग एक छोटे से एप्लिकेशन बनाते समय मैं निम्नलिखित गया अपवाद:एक सरल हाइबरनेट ऐप चलाने के दौरान 'java.lang.IllegalArgumentException: अज्ञात इकाई' से कैसे छुटकारा पाएं?

धागा "मुख्य" java.lang.IllegalArgumentException में अपवाद: अज्ञात इकाई: org.hibernate.ejb.AbstractEntityManagerImpl.persist पर
model.Students (AbstractEntityManagerImpl.java : 223) नियंत्रक पर .माइन.माइन (मुख्य.जावा:50)

क्या कोई मेरी मदद कर सकता है?

इकाई वर्गों इस प्रकार हैं:

Other details: 
NetBeans Version: 6.7.1 
Hibernate : 3.2.5 

इकाई छात्र

package model; 
import java.io.Serializable; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToOne; 

@Entity 
public class Students implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private String name; 

    @OneToOne(cascade=CascadeType.ALL) 
    private Address address; 

    public Address getAddress() { 
     return address; 
    } 

    public void setAddress(Address address) { 
     this.address = address; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 


    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 
} 

किसी अन्य संस्था कक्षा

package model; 

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
@Entity 

public class Address implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 


    private String city; 


    private String zip; 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getZip() { 
     return zip; 
    } 

    public void setZip(String zip) { 
     this.zip = zip; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 
} 

डीएओ फ़ाइल

package controller; import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.EntityTransaction; 
import javax.persistence.Persistence; 
import model.Address; 
import model.Students; 
import org.hibernate.HibernateException; 
public class Main { 
    public static void main(String arr[]) 
    { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("OneToOne2PU"); 
     EntityManager em = emf.createEntityManager(); 
     EntityTransaction tr= em.getTransaction(); 
     try{ 

      tr.begin(); 

      Address add1 = new Address(); 
      add1.setCity("pune"); 
      add1.setZip("09"); 
      Address add2 = new Address(); 
      add2.setCity("mumbai"); 
      add2.setZip("12"); 

      Students s1 = new Students(); 
      s1.setName("abc"); 
      s1.setAddress(add1); 
      Students s2 = new Students(); 
      s2.setName("xyz"); 
      s2.setAddress(add2); 

      em.persist(s1); 
      em.persist(s2); 

      tr.commit(); 
      emf.close(); 

     } 
     catch(HibernateException e){ 
      e.printStackTrace(); 

     } 
    } 

} 

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>  
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">  
    <persistence-unit name="OneToOnePU" transaction-type="JTA">  
    <provider>org.hibernate.ejb.HibernatePersistence</provider>  
    <jta-data-source>students</jta-data-source>  
    <exclude-unlisted-classes>false</exclude-unlisted-classes>  
    <properties>  
     <property name="hibernate.hbm2ddl.auto" value="create-tables"/>  
     <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>  
     <property name="hibernate.connection.username" value="app"/>  
     <property name="hibernate.connection.password" value="app"/>  
     <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/StudentsData"/>  
    </properties>  
    </persistence-unit> 
</persistence> 

hibernate.cfg.xml फ़ाइल

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property> 
    <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property> 
    <property name="hibernate.connection.url">jdbc:derby://localhost:1527/sample</property>  
    <property name="hibernate.connection.username">app</property> 
    <property name="hibernate.connection.password">app</property> 
    <mapping class="model.Students"/> 
    <mapping class="model.Address"/> 
    </session-factory> 
</hibernate-configuration> 

उत्तर

15

परियोजना संरचना के बारे में थोड़ा निर्भर करता है, लेकिन जोड़कर संभावना हठ इकाई तत्व के तहत सीधे persistence.xml के लिए निम्न।

<class>model.Students</class> 
<class>model.Address</class> 

वास्तव में इस तरह:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="OneToOnePU" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 

    <jta-data-source>students</jta-data-source> 
    <class>model.Students</class> 
    <class>model.Address</class> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="create-tables"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/> 
     <property name="hibernate.connection.username" value="app"/> 
     <property name="hibernate.connection.password" value="app"/> 
     <property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/StudentsData"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

वैसे, तुम क्यों hibernate.dialect दोनों persistence.xml में और hibernate.cfg.xml की तरह गुण कॉन्फ़िगर करूँ?

+0

persistence.xml में उपरोक्त कोड जोड़ने के बाद मैं निम्नलिखित अपवाद हो गया है: सूत्र में अपवाद "मुख्य" javax.persistence.PersistenceException: अवैध persistence.xml और काम नहीं किया .. – Supereme

+2

मैं पूरी फ़ाइल चिपकाया है, यह प्रयास करें। "अंडर" के साथ मैं पदानुक्रमित संरचना में, अगली पंक्ति नहीं। जब आपके पास स्कीमा सत्यापन का समर्थन करने वाला संपादक/आईडीई होता है तो यह बहुत मदद करता है। –

+1

मुझे याद आ रही मिस के लिए खेद है। धन्यवाद, आखिर में मैंने बहुत काम किया ... मैं इसे लंबे समय से आजमा रहा था ... भारत में इसकी दिवाली समय 'हैप्पी दीवाली' :) – Supereme

0

आप अपनी संस्थाओं को डीबी टेबल पर कैसे मैप करते हैं? आप इस प्रयोजन के लिए @Entity के साथ @Table (name = "???") एनोटेशन का उपयोग करने का प्रयास कर सकते हैं, जबकि ??? इस इकाई के लिए डेटाबेस में तालिका का नाम इंगित करता है।

+0

असल में मैंने इसका उपयोग करने की कोशिश की .. लेकिन मिक्को द्वारा समाधान के ऊपर समस्या हल हो सकती है। । आप को भी धन्यवाद.. – Supereme

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