2017-03-06 118 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。随着扩展他们不能使用。