我使用MySql命令Line插入了一个User
对象。之后,我尝试使用此用户电子邮件登录。在我的代码中,有find
方法可以使用email
字段查找用户。
我的问题是已经插入了带有此电子邮件的用户 - 带有SQL语句。但是使用namedQuery
无法获取它,我不确定原因。
有人可以给我一个解释吗?
这是我的用户实体。
@Entity
public class User {
@Id
private Long id;
@Embedded
private UserCompositeKey userCompositeKey;
@Column(length = 100)
private String name;
@Column
private String password;
//getters and setters
}
@Embeddable
public class UserCompositeKey implements Serializable {
private static final long serialVersionUID = -9187448094016939417L;
@Column(length = 100, nullable = false)
private String email;
@Column(nullable = false)
private boolean expired;
//getters and setters
}
这是我的SQL插入语句。
INSERT INTO User(id,name, password, email, expired)
VALUES(1,'testUser','pasw123', 'testuser@mail.com',false);
这是namedQuery
:
List<User> users = entityManager.createNamedQuery("select u from User as u where u.userCompositeKey.email = :email and u.userCompositeKey.expired = false", User.class).setParameter("email", email).getResultList();
答案 0 :(得分:1)
createNamedQuery()
期望命名查询的名称作为其第一个参数。你正在传递一个JPQL查询。请改用createQuery()
。
请注意,您的代码应抛出IllegalArgumentException,并显示一条有意义的错误消息,指出问题所在。始终阅读并发布您获得的异常的堆栈跟踪。忽略错误消息不是理解错误发生原因的最佳方式。
答案 1 :(得分:0)
createNamedQuery();除了Query的名称,它可以在类路径中的某个文件中,也可以在模型中使用@NamedQuery注释进行定义。
你可以使用entityManager.createQuery(“JPQL_query”)来解决上述问题。