Java JPA EclipseLink | getResultList返回始终为空

Java JPA EclipseLink | getResultList返回始终为空,java,jpa,eclipselink,Java,Jpa,Eclipselink,大家好,对于我的分布式应用程序项目,我需要用JPA实现一些东西 我设置了数据库,可以向数据库插入新数据。我的主要问题是我想搜索数据并将它们放到对话中(JavaFX) 我的实体类是一个扩展类。代码如下: @Entity @DiscriminatorValue("Marines") public class Marines extends Einheit // Einheit = getter and setter Methods { private int id; privat

大家好,对于我的分布式应用程序项目,我需要用JPA实现一些东西

我设置了数据库,可以向数据库插入新数据。我的主要问题是我想搜索数据并将它们放到对话中(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 (...) 
}
因此,我的搜索调用的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;
}
更新2:数据库值的屏幕: (代表OP发布)


很简单:实体类海军陆战队需要getter和setter。在扩展中,它们无法使用。

为什么要在每个方法中创建EMF?!创建一个EMF并在需要时获得EntityManager。如果要调试JPQL,请查看日志中调用的SQL,它在大多数情况下为您的问题提供了答案。在第二个代码示例中,生成的列表将不是
Marines
类型,因为您只选择
name
attributeIf
System.out.println(foundMarine.getName())打印空,然后您找到了一名海军陆战队士兵,但其名称为空。否则,您将在此行获得NullPointerException@斯维特林扎列夫谢谢你提供的信息,我想把它改成一个字符串。@NeilStockton刚从教授的书中复制了它,但我想把它改了。非常感谢。
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;
}
[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]