我正在为我的应用程序使用GWT,Oracle数据库,Glassfish服务器,JPA.在客户端没有问题.还在服务器端使用Facade模式.

AbstractFacade.java

public abstract class AbstractFacade {

private Class entityClass;

public AbstractFacade(Class entityClass) {

this.entityClass = entityClass;

}

protected abstract EntityManager getEntityManager();

public void create(T entity) {

getEntityManager().persist(entity);

}

public void edit(T entity) {

getEntityManager().merge(entity);

}

public void remove(T entity) {

getEntityManager().remove(getEntityManager().merge(entity));

}

public T find(Object id) {

return getEntityManager().find(entityClass, id);

}

public List findAll() {

javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();

cq.select(cq.from(entityClass));

return getEntityManager().createQuery(cq).getResultList();

}

public List findRange(int[] range) {

javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();

cq.select(cq.from(entityClass));

javax.persistence.Query q = getEntityManager().createQuery(cq);

q.setMaxResults(range[1] - range[0] + 1);

q.setFirstResult(range[0]);

return q.getResultList();

}

public int count() {

javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();

javax.persistence.criteria.Root rt = cq.from(entityClass);

cq.select(getEntityManager().getCriteriaBuilder().count(rt));

javax.persistence.Query q = getEntityManager().createQuery(cq);

return ((Long) q.getSingleResult()).intValue();

}

GroupFacade.java

@Stateless

public class GroupsFacade extends AbstractFacade implements GroupsFacadeLocal {

@PersistenceContext(unitName = "exam_ejb_1.0PU")

private EntityManager em;

@Override

protected EntityManager getEntityManager() {

return em;

}

public GroupsFacade() {

super(Groups.class);

}

}

GroupsFacadeLocal.java

@Local

public interface GroupsFacadeLocal {

void create(Groups groups);

void edit(Groups groups);

void remove(Groups groups);

Groups find(Object id);

List findAll();

List findRange(int[] range);

int count();

}

Groups.java

@Entity

@Table(name = "GROUPS")

@XmlRootElement

@NamedQueries({

@NamedQuery(name = "Groups.findAll", query = "SELECT a FROM AtsTestJautajumsGrupas a"),

@NamedQuery(name = "Grous.findByTestId", query = "SELECT a FROM Groups a WHERE a.TestId = :TestId")})

public class Groups implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@Basic(optional = false)

@NotNull

@Column(name = "GROUP_ID")

private BigDecimal groupId;

@Size(max = 200)

@Column(name = "name")

private String name;

@Column(name = "ARCHIVE_STAT")

private String archiveStat;

@OneToMany(mappedBy = "GroupId")

private Collection questionCollection;

@JoinColumn(name = "TEST_ID", referencedColumnName = "TEST_ID")

@ManyToOne

private Test atsTestId;

public Groups() {

}

//Getters and Setter here...

}

所以我在创建或查找db的所有记录时没有任何问题.

public class ServiceImpl extends RemoteServiceServlet implements Service {

@EJB

AtsTestJautajumsGrupasFacadeLocal grupasEJB;

@Override

public List getCategories() {

List grupas = new ArrayList();

grupas = grupasEJB.findAll();

return grupas;

}

但现在我需要选择具有相同Test_id的组.我创建了@NamedQuery(name =“Grous.findByTestId”……现在我有点迷失了.

所以我的问题是:我如何使用NamedQuery?我在哪里创建一个访问db的方法.我需要从ServiceImpl访问该方法.这样做的正确方法是什么?

编辑:

还有一个问题.何时以及为什么我应该使用CriteriaBuilder而不是你建议的?例:

public AtsTestJautajums getJautajums(Integer atsTestJautajumsId) {

CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery q = cb.createQuery(AtsTestJautajums.class);

Root atsTestJautajums = q.from(AtsTestJautajums.class);

List predicateList = new ArrayList();

Predicate atsTestJautajumsIdPredicate;

if (atsTestJautajumsId != null) {

atsTestJautajumsIdPredicate = cb.equal(atsTestJautajums.get("atsTestJautajumsId"), atsTestJautajumsId);

predicateList.add(atsTestJautajumsIdPredicate);

}

Predicate[] predicates = new Predicate[predicateList.size()];

predicateList.toArray(predicates);

q.where(predicates);

TypedQuery query = em.createQuery(q);

return query.getSingleResult();

}

java facade dao_java – 在Facade模式中放置用于创建namedQuer...相关推荐

  1. java继承层次结构,在状态模式中实现继承层次结构 - java

    我有一个与此非常相似的设计: 这里的NewOrder,Registered&Granted都有通用方法AddOrderline()和Cancel(),因此将这两种方法重构为父类很容易. 当我要 ...

  2. 初学Java常用设计模式之——工厂模式

    声明:转载请附上原文链接 提示:标题序号从2开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--单例模式 序号从1开始 2. 工厂模式(常用) ⼯⼚模式介绍 ...

  3. 带你了解代理模式中的静态代理和动态代理以及cgilib代理^_^

    代理模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能. 这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 这样的意图是: ...

  4. Java设计模式学习之工厂模式

    简单工厂模式 我直接上代码代码里有很详细的注解 //简单工厂模式 是由一个工厂对象决定创建出哪种产品 class Factory1 {publicstatic void main(String[] a ...

  5. java设计模式之九外观模式(Facade)

    外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口 ...

  6. java面试题31:结构型模式中最体现扩展性的模式是()

    java面试题31:结构型模式中最体现扩展性的模式是() A:装饰模式 B:合成模式 C:桥接模式 D:适配器 蒙蔽树上蒙蔽果,蒙蔽树下你和我 结构型模式是描述如何将类对象结合在一起,形成一个更大的结 ...

  7. Java设计模式11:Facade

    门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面对(Facade)象进行. 迪米特法则:只与你直接的朋友们通信. 此设计模式需要一个设计不是很好的系统进行改造来进行对比Facade倒底 ...

  8. Facade (外观)模式

    15.1 Facade 模式   程序总是会变得越来越大.随着时间的推移,程序中的类会越来越多,而且它们之间相互关联,这会导致程序结构也会变得越来越复杂.我们在使用这些类之前,必须先弄清楚它们之间的关 ...

  9. java web里实现 mvc_MVC模式在Java Web应用程序中的实现

    一.MVC简介: MVC架构是一个复杂的架构,其实现也显得非常复杂..Views可以看作一棵树,可以用Composite Pattern来实现.Views和Models之间的关系可以Observer  ...

最新文章

  1. 何恺明、吴育昕最新成果:用组归一化替代批归一化
  2. 华为:Access、Hybrid和Trunk三种模式的理解
  3. 关于汽油清洁剂,到底该不该加?
  4. SAP Commerce Cloud Spartacus UI 4.0.1 版本的安装
  5. 小白系列之51单片机的入门速成法
  6. django get和filter方法的几点不同
  7. BP算法的身份证号码识别
  8. 【生信MOOC】生信数据库1
  9. Matlab 读取.grd文件
  10. 【JVM】运行时数据区介绍,程序计数器和虚拟机栈详解
  11. 网站中PV、UV、IP的区别
  12. UltraEdit mac版破解方法
  13. Web应用程序测试工具Top20
  14. 在线学生计算机,计算机学生顶岗实习计划(网络版)
  15. python多线程糗事百科案例
  16. Android 蓝牙开发(一) -- 传统蓝牙聊天室
  17. 商城小程序系统,商城源码
  18. 信用标准评分卡模型开发及实现
  19. [日语二级词汇]动词(5)
  20. python wx.frame框架属性

热门文章

  1. 7 ArcMap能复制,不能粘贴
  2. 码栈开发手册(三)---编码方式开发(高级课程①)
  3. 计算机网络运输层之多路复用与多路分解
  4. swift开发记录 - MARK,TODO,FIXME
  5. 重温WCF之会话Session(九)
  6. 【CSS】CSS前期回顾(2)
  7. 虚拟化何以四两拨千斤
  8. GreenPlum部署时所修改内核参数的含义
  9. Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)
  10. hdu1848(sg函数打表)