2016-05-08 3 views
0

Javaプロジェクトでエラーが発生しました。JUnitエラーjarファイルのエンティティを使用するときに「不明なエンティティタイプ」

GitHubに接続せずにローカルプロジェクトでコードを実行すると、すべて正常に動作します。できるだけ早く私はGitHubのに接続されているプロジェクトで同じコードのJunit4テストを実行すると、このエラーが発生します。

Java.lang.IllegalArgumentExceptionEntityManagerでクエリを作成中に例外が発生しました:

例外説明を:クエリをコンパイル中にエラーが発生しましたSELECT entity FROM DoSomething entity。不明なエンティティタイプDoSomething

私はEclipse、EclipseLink、PostgreSQL、およびJPAを使用しています。データベースは私のlocalhostにあります。 Gitプロジェクトを実行しているときにlocalhostを見つけるのに問題がありますか?私はGitProject用のローカルリポジトリを持っているので、これは本当に問題だとは思いません。 これは私のエンティティクラスである:

これはEDIT * 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="myDatabase" transaction-type="RESOURCE_LOCAL"> 

    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 

    <exclude-unlisted-classes>false</exclude-unlisted-classes> 

    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> 
     <property name="javax.persistence.jdbc.url" 
      value="jdbc:postgresql://localhost:5432/myDatabase" /> 
     <property name="javax.persistence.jdbc.user" value="postgres" /> 
     <property name="javax.persistence.jdbc.password" value="secret" /> 
     <property name="eclipselink.ddl-generation.output-mode" 
      value="database" /> 
     <shared-cache-mode>NONE</shared-cache-mode> 

     <property name="eclipselink.logging.level" value="off"/> 

     <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 

    </properties> 

</persistence-unit> 

です。

import javax.persistence.*; 

@Entity 
@NamedQueries({ 
    @NamedQuery(name = "findByName", query = "SELECT r FROM DoSomething r WHERE r.name = :name"), 
    @NamedQuery(name = "findByPreis", query = "SELECT r FROM DoSomething r WHERE r.preis = :preis"), 
}) 
public class DoSomething { 

@Id 
@GeneratedValue 
private int id; 
private String name; 
private double preis; 

public DoSomething() { 

} 

public DoSomething(String name, double preis) { 
    this.name = name; 
    this.preis = preis; 
} 

public DoSomething(String name){ 
    this.name = name; 
} 

public int getId() { 
    return id; 
} 

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

public String getName() { 
    return name; 
} 

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

public double getPreis() { 
    return preis; 
} 

public void setPreis(double preis) { 
    this.preis = preis; 
}} 

エンティティクラスをjarファイルにエクスポートしました。次にjarファイルが参照される新しいプロジェクトを開きました。このプロジェクトには、エンティティをデータベースに保持するクラスがあります。パフォーマンス要件のために、エンティティと永続クラスを2つのプロジェクトに分ける必要があります。

これは、永続化クラスをイスト:テストで実行中に

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.Persistence; 
import javax.persistence.TypedQuery; 

import demo.persistence.jpa.JpaUtil; 


public class DoSomethingDAO { 


public void save(DoSomethingDAO entity) throws Exception { 
    EntityManager em = JpaUtil.createEntityManager(); 

    try { 
     em.getTransaction().begin(); 
     em.persist(entity); 
     em.getTransaction().commit(); 
    } catch (Exception e) { 
     if (em.getTransaction().isActive()) { 
      em.getTransaction().rollback(); 
     } 
     throw e; 

    } finally { 
     em.close(); 
    } 
} 


public List<DoSomethingDAO> findByName(String name) throws Exception { 
    EntityManager em = Persistence.createEntityManagerFactory("myDatabase").createEntityManager(); 

    List<DoSomethingDAO> bList = new ArrayList<DoSomethingDAO>(); 

    try { 


TypedQuery<DoSomethingDAO> tQuery = em.createNamedQuery("findByName", DoSomethingDAO.class); 
      tQuery.setParameter("name", name); 

      bList = tQuery.getResultList(); 

      em.close(); 
     } catch (Exception e) { 
      if (em.getTransaction().isActive()) { 
       em.getTransaction().rollback(); 
      } 
      e.printStackTrace(); 
     } 
     return bList; 
    } 
} 
+0

'DoSomething'エンティティクラスを投稿できますか? –

+1

これは私たちに何も教えてくれなかった「DoSomething」クラスです。 persistence.xmlにリストされていませんか? GitHubは絶対に何も関係がありません...クラスはCLASSPATHになければなりません! –

答えて

0

は、クラスパス上のあなたのpersistence.xmlではないように見えます。テストスコープには別のクラスパスがあり、次に主パスがあります。しかし、私は日食でこれを設定する方法を知らない。

0

私は、XML-ファイルへのすべてのクラスの

<exclude-unlisted-classes>true</exclude-unlisted-classes> 
<class>packagename.DoSomehting</class> 

を追加しました。今はうまく動作します。

関連する問題