[英]Can I insert a java entity with sql INSERT statement And retrieve it with JPQL later?
我使用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,並帶有有意義的錯誤消息,指出問題所在。 始終閱讀並發布所獲得的異常的堆棧跟蹤。 忽略錯誤消息不是了解錯誤發生原因的最佳方法。
createNamedQuery(); Query的名稱除外,該名稱可以在類路徑的某個文件中,也可以在模型中使用@NamedQuery批注進行定義。
您可以針對上述問題使用entityManager.createQuery(“ JPQL_query”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.