jpql select在eclipselink中返回null

时间:2015-04-09 22:16:08

标签: sql oracle entity-framework jpa eclipselink

我有一个非常简单的声明,困扰我并返回null,尽管记录保存在数据库中!!

我有一个“administrateur”和“exploitant”实体,它们继承了“Utilisateur”实体(英文xd中的用户),如下所示:

====================== entity administrateur =============== < / p>

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

    public Administrateur(){

    }
}

====================== entity utilisateur =============== < / p>

@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;

====================== 实体explotant =============== < / p>

@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();

它说得到的结果不会取回任何结果!!

在数据库中,我100%表示结果存在:

enter image description here

我无法弄清楚问题,任何人都可以帮助解决相关问题。

感谢。

修改

我得到日志会出现以下错误: enter image description here

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

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

数据库中的请求返回适当的结果。 我也注销了这个:

enter image description here

2 个答案:

答案 0 :(得分:1)

您的映射正常,您的代码正常。 缺少的是ADMINISTRATEUR;

id_utilisateur==1表中的条目

答案 1 :(得分:1)

此问题的常见原因:

  1. 您可能正在使用其他用户/架构检查数据库 来自申请
  2. 您拥有构建实体所需的完整数据。在这种情况下,您的Utilisateur应该在“UTILISATEUR”和“ADMINISTRATEUR”表中都有一行,而ADMINISTRATEUR表需要ID = 1和Type = A.两者都必须存在于Utilisateur实例中。
  3. 如果这不起作用,请尝试保持Utilisateur,然后重新读取相同的实例。