Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在hibernate 5+;使用实体管理器_Hibernate_Jpa_Annotations - Fatal编程技术网

在hibernate 5+;使用实体管理器

在hibernate 5+;使用实体管理器,hibernate,jpa,annotations,Hibernate,Jpa,Annotations,我有两个实体,一对一关系的个人和账户。 在我以前的hibernate中,我有以下方法来过滤person public List filterByPersonalInfo(String personal_info) throws Exception{ List values = null; Session session = getSession(); Criteria criteria = getHBCriteria(session, personal_info);

我有两个实体,一对一关系的个人和账户。 在我以前的hibernate中,我有以下方法来过滤person

public List filterByPersonalInfo(String personal_info) throws Exception{
    List values = null;
    Session session = getSession();
    Criteria criteria = getHBCriteria(session, personal_info);

    criteria.addOrder(Order.desc("person_id"));
    values = criteria.list();
    return values;
}

private Criteria getHBCriteria(Session session, String personal_info) throws       Exception {

Criteria criteria = session.createCriteria(Person.class).createAlias("account", "acc")
            .add(
                    Restrictions.disjunction()

                    .add(Restrictions.ilike("first_name", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("middle_name", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("last_name", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("cnic", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("gender", personal_info, MatchMode.START))
                    .add(Restrictions.ilike("zipcode", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("address1", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("address2", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("phone_no", personal_info, MatchMode.ANYWHERE))

                    .add(Restrictions.ilike("acc.username", personal_info, MatchMode.ANYWHERE))
                    .add(Restrictions.ilike("acc.email", personal_info, MatchMode.ANYWHERE))
           );

    return criteria;
}
现在我想切换到Hibernate5或更高版本(使用jpa注释)。我需要相当于上述,使用实体管理器。 到目前为止,我所做的如下

public List<Person> filterByPersonalInfo(String personal_info) throws Exception{
    List<Person> list = null;

      EntityManager em = HibernateUtil.getEntityManager();
      CriteriaBuilder cb = em.getCriteriaBuilder();
      CriteriaQuery<Person> cq = cb.createQuery(Person.class);
      Root<Person> root = cq.from(Person.class);
      EntityType<Person> type = em.getMetamodel().entity(Person.class);

    // Where
      cq.where(
            cb.or(
            cb.like(root.get(type.getDeclaredSingularAttribute("first_name", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("middle_name", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("last_name", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("cnic", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("gender", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("zipcode", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("address1", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("address2", String.class)), "%" + personal_info + "%"),
            cb.like(root.get(type.getDeclaredSingularAttribute("phone_no", String.class)), "%" + personal_info + "%")
            )
    );

    // Order By
    cq.orderBy(cb.desc(root.get("person_id")));

    list = em.createQuery(cq).getResultList();
    return list;
}
public List filterTypersonalinfo(字符串personal\u info)引发异常{
List=null;
EntityManager em=HibernateUtil.getEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Person.class);
Root=cq.from(Person.class);
EntityType type=em.getMetamodel().entity(Person.class);
//在哪里
哪里(
cb.or(
cb.like(root.get(type.getDeclaredSingularAttribute(“first_name”,String.class)),“%”“+”个人信息“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“中间名”,String.class)),“%”+个人信息+“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“last_name”,String.class)),“%”+个人信息+“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“cnic”,String.class)),“%”+个人信息+“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“性别”,String.class)),“%”+个人信息+“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“zipcode”,String.class)),“%”+个人信息+“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“address1”,String.class)),“%”“+”个人信息“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“address2”,String.class)),“%”“+”个人信息“%”,
cb.like(root.get(type.getDeclaredSingularAttribute(“phone_no”,String.class)),“%”+个人信息+“%”)
)
);
//订购人
cq.orderBy(cb.desc(root.get(“person_id”));
list=em.createQuery(cq.getResultList();
退货清单;
}
我不知道如何过滤帐户的属性,即用户名和电子邮件


谢谢。

createAlias()做什么?它的javadoc说什么?上面写着“加入一个关联,为加入的关联分配一个别名。”。如何从您拥有的根目录创建联接并在联接关联中导航?您最好生成实体元模型类以使用CriteriaAPI。这就是它的安全性和可重构性。但对于不需要从条件生成的静态查询,我只使用JPQL。