Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql jpql select在eclipselink中返回null_Sql_Oracle_Entity Framework_Jpa_Eclipselink - Fatal编程技术网

Sql jpql select在eclipselink中返回null

Sql jpql select在eclipselink中返回null,sql,oracle,entity-framework,jpa,eclipselink,Sql,Oracle,Entity Framework,Jpa,Eclipselink,我有一个非常简单的语句,它困扰着我,即使记录保存在数据库中也会返回null 我有一个“管理员”和“剥削者”实体,继承“利用者”实体(英文xd用户),如下所示: =========================实体管理员=============== @Entity @DiscriminatorValue("A") @Table(name="ADMINISTRATEUR") public class Administrateur extends Utilisateur{ pub

我有一个非常简单的语句,它困扰着我,即使记录保存在数据库中也会返回null

我有一个“管理员”和“剥削者”实体,继承“利用者”实体(英文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(){

    }
}
=========================实体利用率我们===============

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

    }
}
=========================实体爆炸===============

    @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();
}
这是一个不起作用的简单请求,此请求也是如此:

    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();
}
它说getsingle result不会检索任何结果

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

我想不出这个问题,有人能帮我找到一个中肯的答案吗

谢谢

编辑

我得到的日志显示以下错误:

Sauthentifier.java:150=参考:
returnquery\u user.getSingleResult()

===== Creer_encaissement.java:332=参考
final-usilizateur-us=saut.getUserTest()

数据库中的请求将返回相应的结果。 我还得到了这个注销:


映射正常,代码正常。
缺少的是
ADMINISTRATEUR
表中的
id\u usilizateur==1的条目

此问题的常见原因:

  • 您可能正在使用其他用户/架构检查数据库 从应用程序
  • 您拥有构建实体所需的完整数据。在这种情况下,您的Utisulateur在“Utisulateur”和“Administrator”表中都应该有一行,Administrator表需要ID=1和Type=a。这两个表都必须存在Utisulateur实例

  • 如果这不起作用,请尝试持久化一个Utisulateur,然后重新读取该实例。

    为什么您的查询从Utisulateur中选择u作为u
    ?是否有名为
    u
    的字段?你的意思是
    u.*
    ?@Brian我相信jpql就是这样做的,你可以检查:或者:“as”是可选的,通常省略;“从用户中选择用户”也有效。您可以将EclipseLink设置为记录生成的SQL并发布它吗?看看怎么做。尝试直接在数据库中执行查询并查看结果。我认为不需要在事务中封装简单的select查询——只要它不是JTA数据源,查询就不需要事务,如果它是JTA数据源,就不能使用em.getTransaction().begin()启动查询;无论如何。@Chris我已经添加了注销,但我不知道为什么会返回null,因为我还有其他语法完全相同的查询,它们不会返回null。首先,我没有得到你的建议。我正在添加脚本中的记录:插入到Usilizateur值中(1,'Administrator','am_dehimi@esi.dz“,”admin“,”admin“,”Farid“,”Farid“);这不会插入到administrator表中。然后我添加了:在管理员(ID_usilizateur)中插入值(1);通过实体(java代码)插入更好(jpa处理约束和继承),而不是我必须手动添加到所有表中的sql。谢谢@Chris。例如,我怎样才能让administrator.nom知道“nom”是sql中utisulateur(administrator扩展了utisulateur)的一个属性。我是否必须通过身份证使用join?ThanksI认为您正在使用JPA,它允许您查询任何实体属性,并将为您处理SQL中的连接。如果使用本机SQL查询,是的,您必须自己处理到需要包含在select或where子句中的表的联接。不,不,我使用的是jpa,问题是我必须联接三到四个表,这很复杂,因为我有许多继承,我正在考虑为此创建一个视图。您认为带有表注释的视图会比jpql语句(类型化查询)更好吗?您是对的,记录在表usilizateur中,但不在表Administrateur中。谢谢你,伙计。