日期:2014-05-19  浏览次数:20659 次

怎么写jax-RS/Jersey/restful webservice里头的方法
我知道自带的一些基本方法 比如findAll()
 javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
    cq.select(cq.from(entityClass));
    return getEntityManager().createQuery(cq).getResultList();


但是仍然不明白 怎么使用where查询 比如查询学生年纪大于18的所有学生数据 或者多表连接查询 left join right join等等

我现在的做法是 因为返回的都是List<T>嘛。。。我就直接操作list里头数据了 比如删掉没用的 或者取2个list交集
------最佳解决方案--------------------
那和WebService有P关系,那叫JPA,做增删改查的。

JPA有自己的provider,用哪个provider,就用哪个provider的套路去做事,基本可以直接参照Hibernate。


------其他解决方案--------------------
这个JPA的查询结果最终是要用于webservice的? 否则貌似是没啥关联

看下

import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.commons.lang.StringUtils;
 
...
 
@SuppressWarnings("unchecked")
public List<Author> getAuthorsByLastName(String lastName) {
    String queryString = "SELECT a FROM Author a " +
                         "WHERE :lastName IS NULL OR LOWER(a.lastName) = :lastName";
    Query query = getEntityManager().createQuery(queryString);
 
    query.setParameter("lastName", StringUtils.lowerCase(lastName));
    return query.getResultList();
}




------其他解决方案--------------------
分层,接口层(restful session bean), 业务逻辑层, ORM层(session Bean实现,除了创建、get、更新、删除等基本方法,主要是增加业务逻辑层需要的各种查询),JPA映射关系

接口层处理输入输出对象校验和赋值,然后调用业务逻辑层处理业务动作,业务逻辑层需要的对象操作(创建、get、更新、删除、查询),在ORM层实现