Hibernate在db

时间:2016-06-21 13:09:35

标签: java hibernate

这里的简单问题:

如果我有一个带有初始化和未初始化值的对象。有没有简单的方法在我的数据库中找到适合这个与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,但我找不到如何使用它作为一个例子。

2 个答案:

答案 0 :(得分:3)

是的它存在:谷歌的关键词是&#34;按例子查询&#34;或&#34; qbe&#34;。 https://dzone.com/articles/hibernate-query-example-qbe

答案 1 :(得分:0)

通常,如果实体实例已经在您的持久性上下文中,您可以通过主键EntityManager.find找到它。否则,您可以通过JPQLnative查询从数据库中获取结果。

对于您的特定用例,听起来像查询解决方案是最合适的;使用您实体中的一个链接查询创建方法,然后使用Query.getResultList()方法获取符合查询条件的对象列表。

QueryByExample也是一个很好的有效解决方案,正如Mr_Thorynque指出的那样,但正如他所提到的文章所述,该功能特定于某些JPA提供程序(其中包括Hibernate)而不是JPA提供程序不可知。