日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/5/22 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java facade dao_java – 在Facade模式中放置用于创建namedQuer... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在為我的應用程序使用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...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。