![](/img/trans.png)
[英]Does saveOrUpdate() in Hibernate preserve the value of existing fields which are there in DB but not set in the object passed to the function?
[英]Hibernate find an existing object in db
這里的簡單問題:
如果我有一個帶有初始化和未初始化值的對象。 有沒有一種簡單的方法可以在我的數據庫中找到所有適合此休眠的實體? (無需列出和檢查對象的每個變量)
范例:
我上了這堂課:
public class User {
private int id;
private String name;
private String email;
private boolean activ;
}
我希望能夠做到這一點:
User user1 = new User();
user.setActive() = true;
User user2 = new User();
user.setActive(true);
user.setName("petter")
listUser1 = findAllUser(user1);
listUser2 = findAllUser(user2);
在此,listUser1將包含所有活動用戶,listUser2將包含所有名為petter的活動用戶。
謝謝你們!
因此,這是我的代碼(我使用的示例與我的示例類似)。 它工作正常,但問題是根據Eclipse:“不贊成使用SharedSessionContract類型的createCriteria(Class)方法”。
public static List<Personne> findAllPersonne(Personne personne) {
List<Personne> listPersonne;
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("testhibernate0");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Session session = entityManager.unwrap(Session.class);
Example personneExample = Example.create(personne);
Criteria criteria = session.createCriteria(Personne.class).add(personneExample);
listPersonne = criteria.list();
entityManager.close();
return listPersonne;
}
所以..我怎樣才能更好地做到這一點? 我已經研究了CriteriaQuery,但我無法通過示例找到如何使用它。
是的,它存在:谷歌的關鍵詞是“按實例查詢”或“ qbe”。 https://dzone.com/articles/hibernate-query-example-qbe
通常,如果實體實例已經存在於Persistence上下文中,則可以使用EntityManager.find
通過主鍵找到它。 否則,您可以通過JPQL或本機查詢從數據庫中檢索結果。
對於您的特定用例,聽起來像是最適合的查詢解決方案。 請使用您實體中的一種鏈接查詢創建方法,然后使用Query.getResultList()
方法選擇一個符合查詢條件的對象列表。
正如Mr_Thorynque指出的那樣,QueryByExample也是一個很好且有效的解決方案,但是正如他所鏈接的文章所提到的那樣,該功能特定於某些JPA提供程序(其中包括Hibernate),而不是JPA提供程序不可知的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.