2016-04-04 4 views
1

私は、EclipseLinkのテーブルからすべての行を取得しようとしています。テーブルからすべてのレコードを取得する - EclipseLink

JPAツールを使用してdbから自分のエンティティを作成しました。結果は次のようになります。

@Entity 
@Table(name="employee", schema="hr") 
@NamedQuery(name="Employee.findAll", query="SELECT e FROM Employee e") 
public class Employee implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id; 

    private String name; 

    public Employee() { 
    } 

    public Integer getId() { 
     return this.id; 
    } 

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

    public String getName() { 
     return this.name; 
    } 

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

} 

多くのページが見つかり、すべてのレコードを取得するためにQueryオブジェクトを作成するページが多数見つかりましたが、このような「選択」クエリが再び定義されています。

Query q = em.createQuery("select e from Employee e"); 

しかし、研究を行っているが、最終的に私はこのようなものを見つけました:

public List<Employee> getEmployees() { 
     EntityManagerFactory factory = Persistence.createEntityManagerFactory("ResourcesService"); 
     EntityManager em = factory.createEntityManager(); 
     Query q = em.createQuery("from Employee e", Employee.class); 
     return q.getResultList(); 
    } 

は単なるクラス名を使用して、これを照会するためにも、より簡単な方法はありますか?マッピングされたエンティティにはすでに選択クエリが含まれているためです。

私はこの架空の例のような何かを行うために、この

Query q = em.createQuery("from Employee e", Employee.class); 

を行うのではなく、意味:あなたが定義した名前付きクエリを使用しないのはなぜ

Query q = em.createQuery(Employee.class); 

答えて

0

を?あなたが "Employee.class" という名前を付けでき

em.createNamedQuery("Employee.findAll").getResultList(); 

... :-)

+0

感謝。私は自分のエンティティでその属性を認識しませんでした。私はそれがeclipselinkフレームワークによって自動的に内部的に使用されたと考えました。さらに、設定の一部としてそれを変更できないと考えました。今私はそれがより柔軟であることを知っています。 –

+0

あなたはあなたが望むすべての 'NamedQueries'を作成することができます。 –