2011-10-25 5 views
6

Hazırda bekletme konusunda yeniyim. bunu kullanarak küçük bir app oluştururken aşağıdaki got istisna: iplik "ana" java.lang.IllegalArgumentException içindeBasit bir hazırda bekletme uygulaması çalışırken 'java.lang.IllegalArgumentException: Bilinmeyen varlık' nasıl kurtululur?

İstisna: Bilinmeyen varlık: org.hibernate.ejb.AbstractEntityManagerImpl.persist de
model.Students (AbstractEntityManagerImpl.java : 223) denetleyicide . (Ana.java:50)

Lütfen bana yardım edebilir misiniz? aşağıdaki gibi

Entity sınıfları şunlardır:

Other details: 
NetBeans Version: 6.7.1 
Hibernate : 3.2.5 

Varlık öğrenciler

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; 
    } 
} 

Başka Varlık Sınıfı

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; 
    } 
} 

DAO dosyası

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> 

<?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> 

cevap

15

proje yapısı hakkında biraz değişir hibernate.cfg.xml dosyası, ancak ekleyerek olası sürekliliğinin birimi elemanı altında doğrudan persistence.xml için aşağıdaki. Aynen bunun gibi

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

: Bu arada

<?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> 

, neden hibernate.dialect hem persistence.xml içinde ve hibernate.cfg.xml gibi özelliklerini yapılandırırım?

+0

persistence.xml içinde yukarıdaki kodu ekledikten sonra aşağıdaki özel durum var: "ana" javax.persistence.PersistenceException özel durum: Exception: invalid persistence.xml ve çalışmadı .. – Supereme

+2

Tüm dosyayı yapıştırdım, deneyin. "Altında" ile sıradaki hiyerarşik yapıda değil. Şema doğrulamasını destekleyen editör/IDE'niz olduğunda çok yardımcı olur. –

+1

Bunu yorumlamadığım için üzgünüm. Sonunda çok çalıştı teşekkürler ... Ben uzun zamandır deniyordum ... Hindistan'da Diwaali Zaman bu kadar 'Mutlu Diwaali' :) – Supereme

0

Varlıklarınızı db tablolarıyla nasıl eşleştiriyorsunuz? @Table (name = "???") ek açıklamasını @Entity ile bu amaçla kullanabilirsin, ??? Bu varlık için veritabanındaki tablo adını gösterir.

+0

Aslında ben de bunu kullanmayı denedim .. ama Mikko çözüm yukarıda sorunun çözebilir. . Sana da teşekkürler.. – Supereme