eclipselink 中的 jpql select returns 为空

jpql select returns null in eclipselink

我有一个非常简单的陈述困扰着我,returns null 尽管记录很好地保存在数据库中!

我有一个 "administrateur" 和 "exploitant" 实体继承了 "Utilisateur" 实体(英文用户 xd),如下所示:

====================== 实体管理员 =========== ====

    @Entity
@DiscriminatorValue("A")
@Table(name="ADMINISTRATEUR")
public class Administrateur extends Utilisateur{

    public Administrateur(){

    }
}

====================== 实体实用程序 =========== ====

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="TYPE_UTILISATEUR")
@Table(name="UTILISATEUR")
@Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="utilisateur_seq_gen")
    @SequenceGenerator(name="utilisateur_seq_gen", sequenceName="UTILISATEUR_SEQ", allocationSize = 1, initialValue = 1)
    protected Long id_utilisateur;
    @Column(name="NOM")
    protected String nom;
    @Column(name="PRENOM")
    protected String prenom;

    @Column(name="LOGIN")
    protected String login;
    @Column(name="MOT_PASSE_UTILISATEUR")
    protected String mot_passe_utilisateur;
    @Column(name="EMAIL")
    protected String email;

====================== 实体外显子 =========== ====

@Entity
@DiscriminatorValue("E")
@Table(name="EXPLOITANT")
public class Exploitant extends Utilisateur{

    @Column(name="ROLE")
    private String role;
public Exploitant(){

    }
}

我使用此请求检索用户:

    public Utilisateur getUserTest(){
    EntityManager em=new JPAContainerFactory().createEntityManagerForPersistenceUnit("addressbook");
    em.getTransaction().begin();

TypedQuery<Utilisateur> query_user = em.createQuery("SELECT u FROM Utilisateur AS u WHERE u.id_utilisateur=1", Utilisateur.class);
    em.getTransaction().commit();   

    return query_user.getSingleResult();
}

然后我在这里调用它:

final Utilisateur us=saut.getUserTest();

这是一个不起作用的简单请求,同样适用于此请求:

    public Utilisateur getUserFromMail(String email){
    EntityManager em=new JPAContainerFactory().createEntityManagerForPersistenceUnit("addressbook");
    em.getTransaction().begin();

    TypedQuery<Utilisateur> query_user = em.createQuery("SELECT u FROM Utilisateur AS u WHERE u.email= :email", Utilisateur.class);
    query_user.setParameter("email", email);
    em.getTransaction().commit();   

    return query_user.getSingleResult();
}

然后我从这里调用它:

Utilisateur user=saut.getUserFromMail(emailString);
//user.setMot_passe_utilisateur(String.valueOf(pswd));
em.getTransaction().begin();
em.merge(user);
em.flush();
em.getTransaction().commit();

它说 getsingle result 没有检索到任何结果!!

在数据库中,我 100% 确定结果存在:

我想不通,谁能帮忙解答一下。

谢谢。

编辑

我得到的日志给出了以下错误:

Sauthentifier.java:150 = 参考:return query_user.getSingleResult();

===== Creer_encaissement.java:332=参考final Utilisateur us=saut.getUserTest();

在数据库中请求return相应的结果。 我也得到了这个注销:

你的映射没问题,你的代码没问题。 缺少的是 ADMINISTRATEUR table 中用于 id_utilisateur==1;

的条目

此问题的常见原因:

  1. 您可能正在使用不同的 user/schema 检查数据库 来自应用程序
  2. 您拥有构建实体所需的完整数据。在这种情况下,您的 Utilisateur 应该在 "UTILISATEUR" 和 "ADMINISTRATEUR" table 中都有一行,并且 ADMINISTRATEUR table 需要 ID= 1 和 Type=A。两者都必须存在才能存在 Utilisateur 实例。

如果这不起作用,请尝试持久化 Utilisateur,然后再读回同一实例。