日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java facade dao_java – 在Facade模式中放置用于创建namedQuer... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我正在為我的應(yīng)用程序使用GWT,Oracle數(shù)據(jù)庫(kù),Glassfish服務(wù)器,JPA.在客戶(hù)端沒(méi)有問(wèn)題.還在服務(wù)器端使用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...

}

所以我在創(chuàng)建或查找db的所有記錄時(shí)沒(méi)有任何問(wèn)題.

public class ServiceImpl extends RemoteServiceServlet implements Service {

@EJB

AtsTestJautajumsGrupasFacadeLocal grupasEJB;

@Override

public List getCategories() {

List grupas = new ArrayList();

grupas = grupasEJB.findAll();

return grupas;

}

但現(xiàn)在我需要選擇具有相同Test_id的組.我創(chuàng)建了@NamedQuery(name =“Grous.findByTestId”……現(xiàn)在我有點(diǎn)迷失了.

所以我的問(wèn)題是:我如何使用NamedQuery?我在哪里創(chuàng)建一個(gè)訪(fǎng)問(wèn)db的方法.我需要從ServiceImpl訪(fǎng)問(wèn)該方法.這樣做的正確方法是什么?

編輯:

還有一個(gè)問(wèn)題.何時(shí)以及為什么我應(yīng)該使用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();

}

總結(jié)

以上是生活随笔為你收集整理的java facade dao_java – 在Facade模式中放置用于创建namedQuer...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。