2013-06-12 4 views
23

このテストプロジェクトで初めてJPAを休止状態の実装でセットアップしようとしています。次のエラーに遭遇した:org.hibernate.AnnotationException:エンティティの@OneToOneまたは@ManyToOne.quations#tion.examIdが未知のエンティティを参照しています:long

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: ExamModulePu] Unable to build EntityManagerFactory 
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:924) 
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899) 
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:59) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) 
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 
at service.tests.ExamServiceTest.main(ExamServiceTest.java:18) 
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on entities.Question.examId references an unknown entity: long 
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:109) 
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1536) 
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1457) 
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1365) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1756) 
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96) 
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914) 

は、これらは私の実体である:

@Entity 
public class Exam implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 
    private String name; 
    private int numQuestions; 
    private int minutesAllotted; 
    private Date startDate; 
    private Date endDate; 
    @OneToMany(mappedBy = "examId", orphanRemoval = true) 
    private List<Question> questionList; 
     // Getters and setters here.. 
} 

@Entity 
public class Question implements Serializable{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private long id; 
    @ManyToOne 
    private long examId; 
    private int points; 
    private int timeLimit; 
    private String text; 
    private String category; 
    @Embedded 
    private List<Answer> answerList; 
} 

@Embeddable 
public class Answer implements Serializable { 

    private int optionNumber; 
    private String text; 
    private boolean correct; 
} 

これは私のpersistence.xmlは次のようになります。私は、のいずれかを作成していない

<?xml version="1.0" encoding="UTF-8"?> 
<persistence 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_2_0.xsd" 
    version="2.0"> 
    <persistence-unit name="ExamModulePu" 
     transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>entities.Exam</class> 
     <class>entities.Question</class> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/exammoduledb" /> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="root" /> 
      <property name="hibernate.hbm2ddl.auto" value="create" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

代わりにhibernate.hb2mddl.autoに依存しています。しかし、永続性ユニットを生成できないため、エラーが発生する前でもエラーが発生すると私は信じています。私が間違っていることは何ですか?私が作ってるんだあなたがあなたのスタックトレースをよく見ると、私は唯一のjavax.persistence.*;

答えて

52

をインポートするには、だから、このフィールド

@ManyToOne 
private long examId; 

が問題を引き起こしている

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on entities.Question.examId references an unknown entity: long 

が表示されます。

(Optional) The entity class that is the target of the association. Defaults to the type of the field or property that stores the association.

をあなたはそのパラメータを提供していないので、管理Entityないlongデフォルト:@ManyToOneは言うのparamater targetEntityを持っています。

おそらく、それ以外の場合は、にマッピングするかを知ることができません

@ManyToOne(targetEntity = Exam.class) 
private long examId; 

を使用したいと思います。 Hibernateはそれに追加せずに識別していないため、またはより良い

@ManyToOne 
private Exam exam; 
12

ただ、「休止状態-cfg.xmlファイルを」ファイルにクラスチームを追加します。あなたはHibernateの注釈を持っている場合

8

FYI、これは時々起こる:

@org.hibernate.annotations.Entity 

とJPA注釈:

編集混ざっ

@javax.persistence.Entity 

明示的にインポートしますjavaxアノテーション。

+1

私は何を提案しますか@CoffeJunky? – sisimh

+0

彼の提案は、org.hibernate.annotations.Entity'の代わりに 'javax.persistence.Entity'を排他的にインポートすることです。 –

+0

これは私のプログラムの場合ではありませんが、まだエラーがあります – Avdhut

関連する問題