2017-03-06 113 views
0

您好,我的項目分佈式應用程序我需要實現與JPA的東西。JPA EclipseLink | getResultList返回始終爲空

我建立了數據庫,我可以將新的數據插入數據庫。我的主要問題是我想要搜索數據並讓它們對話(JavaFX)

我的實體類是擴展的。繼承人的代碼:

@Entity 
@DiscriminatorValue("Marines") 
public class Marines extends Einheit 
// Einheit = getter and setter Methods 
{ 
    private int id; 

    private String name; 
    private String type; 
    private String punkte; 
    private String modelSize; 
    private String movement; 
    private String closeCombat; 
    private String rangedSkill; 
    private String strength; 
    private String conditions; 
    private String wounds; 
    private String armorValue; 
    private String leadership; 
    // Constructor (...) 
} 

所以我的搜索調用是我要尋找的dialoge與buttonclick其中id增量的下一個項目內的ID。

public List<Marines> showMarinesWithID(int id) 
{ 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("demo"); 
    EntityManager em = emf.createEntityManager(); 

    String jpql = "SELECT m FROM Marines m WHERE m.id = 1";// + id; 
    Query query = em.createQuery(jpql); 
    List<Marines> ma = query.getResultList(); 

    Marines foundMarine = em.find(Marines.class, 1); 

    System.out.println(foundMarine.getName()); 
    return ma; 
} 

而且已經有一個問題:如果我打印出來,它只顯示null。正如你所看到的,我已經嘗試了find方法和jpql的調用。該值始終爲空。 我有一個搜索方法可以工作,但有另一種情況。在那裏,我只需要條目的名稱並顯示它們。這看起來是這樣的:

public List<Marines> getMarineNames() 
{ 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("demo"); 
    EntityManager em = emf.createEntityManager(); 

    String jpql = "select m.name from Marines m"; 

    Query query = em.createQuery(jpql); 

    List<Marines> marines = query.getResultList(); 

    return marines; 
} 

更新1:從第一個方法的SQL日誌

[EL Fine]: sql: 2017-03-06 17:50:40.943--ServerSession(1404945014)--Connection(1537026053)--SELECT ID, ARMORVALUE, CLOSECOMBAT, CONDITIONS, LEADERSHIP, MODELSIZE, MOVEMENT, NAME, PUNKTE, RANGEDSKILL, STRENGTH, TYPE, WOUNDS FROM MARINES WHERE (ID = ?) 
bind => [1 parameter bound] 

更新2:數據庫值的畫面: Database entries

+0

你爲什麼要在每種方法中創建一個EMF?創建單個EMF並在需要時獲取EntityManager。如果想要DEBUG JPQL,請在日誌中查看所調用的SQL,它在大多數情況下給出了您的問題的答案 –

+0

在第二個代碼示例中,結果列表不會是「Marines」類型,因爲您只選擇了「名稱'屬性 –

+0

如果'System.out.println(foundMarine.getName());'輸出null,那麼你已經找到一個海洋,但它的名字是空的。否則,你會在這一行得到一個NullPointerException! –

回答

-1

(發佈代表OP)

很簡單:實體類Marines需要getter和setter。隨着擴展他們不能使用。