Javaプロジェクトでエラーが発生しました。JUnitエラーjarファイルのエンティティを使用するときに「不明なエンティティタイプ」
GitHubに接続せずにローカルプロジェクトでコードを実行すると、すべて正常に動作します。できるだけ早く私はGitHubのに接続されているプロジェクトで同じコードのJunit4テストを実行すると、このエラーが発生します。
Java.lang.IllegalArgumentException
:EntityManager
でクエリを作成中に例外が発生しました:例外説明を:クエリをコンパイル中にエラーが発生しました
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;
}
}
'DoSomething'エンティティクラスを投稿できますか? –
これは私たちに何も教えてくれなかった「DoSomething」クラスです。 persistence.xmlにリストされていませんか? GitHubは絶対に何も関係がありません...クラスはCLASSPATHになければなりません! –