这里的简单问题:
如果我有一个带有初始化和未初始化值的对象。有没有简单的方法在我的数据库中找到适合这个与hibernate的所有实体? (没有列出并检查对象的每个变量)
示例:
我上了这堂课:
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的所有活动用户。
Thx伙计们!
所以我的这里是我的代码(我使用了一个与我的例子类似的类)。 它运行得很好,但问题是根据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,但我找不到如何使用它作为一个例子。
答案 0 :(得分:3)
是的它存在:谷歌的关键词是&#34;按例子查询&#34;或&#34; qbe&#34;。 https://dzone.com/articles/hibernate-query-example-qbe
答案 1 :(得分:0)
通常,如果实体实例已经在您的持久性上下文中,您可以通过主键EntityManager.find
找到它。否则,您可以通过JPQL或native查询从数据库中获取结果。
对于您的特定用例,听起来像查询解决方案是最合适的;使用您实体中的一个链接查询创建方法,然后使用Query.getResultList()
方法获取符合查询条件的对象列表。
QueryByExample也是一个很好的有效解决方案,正如Mr_Thorynque指出的那样,但正如他所提到的文章所述,该功能特定于某些JPA提供程序(其中包括Hibernate)而不是JPA提供程序不可知。