2011-10-25 34 views
6

我是Hibernate的新手。雖然使用它創建一個小的應用程序我得到了以下異常:線程「主」 java.lang.IllegalArgumentException異常如何在運行一個簡單的hibernate應用程序時擺脫'java.lang.IllegalArgumentException:Unknown entity'?

異常:未知的實體:在org.hibernate.ejb.AbstractEntityManagerImpl.persist
model.Students(AbstractEntityManagerImpl.java :223) at controller.Main.main(Main.java: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; 
    } 
} 

的DAO文件

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中添加上面的代碼後,我得到以下異常:線程「main」中的異常javax.persistence.PersistenceException:無效的persistence.xml 並沒有工作.. – Supereme

+2

我粘貼整個文件,嘗試它。與「下」我意味着分層結構,而不是下一行。當您擁有支持模式驗證的編輯器/ IDE時,它會有很大的幫助。 –

+1

對不起,我很抱歉解釋它。非常感謝它終於工作......我很長時間以來一直在嘗試......它在印度的Diwaali時間如此'快樂Diwaali':) – Supereme

0

你如何將你的實體映射到數據庫表? 您可以嘗試使用@Table(name =「???」)與@Entity爲此目的的註釋, 而???表示數據庫中該實體的表名。

+0

其實我也嘗試過使用它..但上面Mikko的解決方案可以解決這個問題。 。 也謝謝你.. – Supereme

相關問題