2011-10-25 5 views
6

私はHibernateを初めて使用しています。それを使って小さなアプリケーションを作成している間、私は次しまっ例外:スレッド「メイン」java.lang.IllegalArgumentExceptionがでシンプルな休止状態のアプリケーションを実行しているときに '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> 

あなたはpersistence.xmlのとhibernate.cfg.xmlの両方でhibernate.dialectなどのプロパティを設定しない理由ところで、?

+0

上記のコードをpersistence.xmlに追加した後、次の例外が発生しました。スレッド "main" javax.persistence.PersistenceExceptionの例外:無効なpersistence.xml が動作しませんでした。 – Supereme

+2

ファイル全体をペーストしました。下の "I"は階層構造を意味し、次の行は意味しません。これは、スキーマの検証をサポートするエディタ/ IDEを持っているときに役立ちます。 –

+1

私はそれを見逃して申し訳ありません。最後に働いてくれてありがとう...私は長い時間をかけてそれを試していた...そのインドのDiwaali時間ので、 'Happy Diwaali' :) – Supereme

0

どのようにエンティティをdbテーブルにマップしますか? @Table(name = "???")アノテーションを@Entityと共に使用すると、 のように表示されますが、???このエンティティのデータベース内のテーブル名を示します。

+0

実際に私もそれを使ってみました..しかし、上記の解決策は、Mikkoによって問題を解決することができます。あなたにもありがとう.. – Supereme