具有适当参数的EntityManager查找方法返回null

时间:2015-09-30 06:57:27

标签: java spring null find entitymanager

我试图通过这种方法在我的DAO方法中获取电子邮件实体:

Emails mail = entityManager.find(Emails.class, email);

//test
System.out.println("code: " + code + ", email: " + email);
System.out.println(mail == null ? "mail equal null"
    : ("mail:" + mail.getConfirmationCode() + ", "
            + mail.getEmail() + ", " + mail.getUser_id()));

其中entityManager的find方法返回null。我确定该方法的两个参数都是正确的,并且该行存在于我的数据库中,因此方法shuld返回一个实体,而不是null。

重要的是什么。当我在具有相同参数的同一DAO类的另一个方法中使用相同的方法时,它工作正常并且entityManager的find方法返回适当的实体。所有方法都注释为Transactional。

我注意到当我调用find方法引用另一行时,它返回正确的实体。问题只出现在一个实体上,但与该实体相同的查找方法仍然适用于其他DAO的方法。

更新 让我们说该行的主键是" adrian@domain.com"。然后(所有在相同的DAO方法中)当我手动在第二个参数中键入PK然后它返回正确的实体:

Emails mailAddresse = entityManager.find(Emails.class, "adrian@domain.com");

当我将电子邮件实例传递给方法的PK参数" adrian@domain.com"时,它返回null:

Emails mail = entityManager.find(Emails.class, email);
        System.out.println("email: " + email);

在控制台中我可以看到电子邮件:" adrian@domain.com" 但是以下代码打印在控制台电子邮件中不等于adrian @ domain.com

if("adrian@domain.com".equals(email)) System.out.println("email equal adrian@domain.com");
        else System.out.println("email not equal adrian@domain.com");

当我希望电子邮件等于adrian@domain.com 时。有谁知道为什么?

问题解决了: find方法返回null的原因是我通过假设带有双引号的HTTP请求参数将电子邮件传递给电子邮件变量,这是错误的方式:

.../confirmation?email="adrian@domain.com"

,不带引号,这样:

.../confirmation?email=adrian@domain.com

0 个答案:

没有答案