我可以使用sql INSERT语句插入java实体并在以后使用JPQL检索它吗?

时间:2014-01-02 11:13:04

标签: java sql jpa jpql

我使用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();

2 个答案:

答案 0 :(得分:1)

createNamedQuery()期望命名查询的名称作为其第一个参数。你正在传递一个JPQL查询。请改用createQuery()

请注意,您的代码应抛出IllegalArgumentException,并显示一条有意义的错误消息,指出问题所在。始终阅读并发布您获得的异常的堆栈跟踪。忽略错误消息不是理解错误发生原因的最佳方式。

答案 1 :(得分:0)

createNamedQuery();除了Query的名称,它可以在类路径中的某个文件中,也可以在模型中使用@NamedQuery注释进行定义。

你可以使用entityManager.createQuery(“JPQL_query”)来解决上述问题。