【问题标题】:JPA EclipseLink |getResultList returns always nullJPA EclipseLink |getResultList 总是返回 null
【发布时间】:2017-03-06 16:43:24
【问题描述】:

您好,对于我的分布式应用程序项目,我需要用 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;
}

而且已经有一个问题:如果我打印出来,它只会显示空值。如您所见,我已经尝试了 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

【问题讨论】:

  • 你为什么要在每种方法中创建一个 EMF?!创建一个 EMF 并在需要时获取一个 EntityManager。如果要调试 JPQL,请查看日志中调用的 SQL,它在大多数情况下都可以解决您的问题
  • 在第二个代码示例中,结果列表将不是 Marines 类型,因为您只选择了 name 属性
  • 如果 System.out.println(foundMarine.getName()); 打印 null 则您找到了一个海军陆战队员,但其名称为 null。否则你会在这一行得到一个 NullPointerException!
  • @SvetlinZarev 感谢您提供将其更改为字符串的信息。
  • @NeilStockton 刚刚从教授的书中复制了它。但是要改。谢谢!

标签: java jpa eclipselink


【解决方案1】:

(代表 OP 发布)

就这么简单:实体类 Marines 需要 getter 和 setter。不能使用扩展名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2017-11-21
    • 2014-03-04
    • 2016-11-02
    • 2014-05-06
    • 2012-06-05
    • 2014-05-30
    相关资源
    最近更新 更多