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
;
的条目
此问题的常见原因:
- 您可能正在使用不同的 user/schema 检查数据库
来自应用程序
- 您拥有构建实体所需的完整数据。在这种情况下,您的 Utilisateur 应该在 "UTILISATEUR" 和 "ADMINISTRATEUR" table 中都有一行,并且 ADMINISTRATEUR table 需要 ID= 1 和 Type=A。两者都必须存在才能存在 Utilisateur 实例。
如果这不起作用,请尝试持久化 Utilisateur,然后再读回同一实例。
我有一个非常简单的陈述困扰着我,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
;
此问题的常见原因:
- 您可能正在使用不同的 user/schema 检查数据库 来自应用程序
- 您拥有构建实体所需的完整数据。在这种情况下,您的 Utilisateur 应该在 "UTILISATEUR" 和 "ADMINISTRATEUR" table 中都有一行,并且 ADMINISTRATEUR table 需要 ID= 1 和 Type=A。两者都必须存在才能存在 Utilisateur 实例。
如果这不起作用,请尝试持久化 Utilisateur,然后再读回同一实例。