我使用 MySql 命令行插入了一个 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();
最佳答案
createNamedQuery()
期望命名查询的名称作为其第一个参数。您将向其传递一个 JPQL 查询。使用createQuery()
相反。
请注意,您的代码应该抛出 IllegalArgumentException,并带有有意义的错误消息来指示问题所在。始终阅读并发布您收到的异常的堆栈跟踪。忽略错误消息并不是理解错误发生原因的最佳方法。
关于java - 我可以使用 sql INSERT 语句插入 java 实体并稍后使用 JPQL 检索它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20881667/