簡體   English   中英

我可以使用sql INSERT語句插入Java實體,稍后再使用JPQL檢索它嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM