我试图通过这种方法在我的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