在JPA中,实体是很好的注释的普通旧Java对象。但是我还没有找到一个与它们和数据库交互的好方法。什么是针对Java的查询“图层”的好设计JPA
在我目前的应用程序中,我的基本设计总是有一个基于序列的id作为主键,所以我通常必须通过除PK之外的其他属性来查找实体。
并为每个实体我有
@Stateless
public class MyEntApiBean implements MyEntApi {
@PersistenceContext(unitName = "xxx") @Inject EntityManager entityManager;
与查询方法,所有的都是一些变化
/**
* @return A List of all MyEnts that have some property
* @param someProp some property
*/
public List<MyEnt> getAllMyEntsFromProp(final String someProp) {
try {
final Query query = entityManager.createQuery("select me from MyEnt me where me.someProp = :someProp");
query.setParameter("someProp", someProp);
return query.getResultList();
} catch(final NoResultException nre) {
log.warn("No MyEnts found");
}
return new ArrayList<MyEnt>();
}
因此,一个无状态EJB:
我真的很讨厌有这些EJB中的方法,因为它们似乎属于实体本身,EJB本地接口a不要把我当作垃圾。我讨厌在每个方法中使用“try,createQuery,getResultList,catch,log,return”(主要是没有关闭或者“with语句”或某些Java语言中的结果)的重复。
有没有人有更好的方式与实体和数据库进行交互,以解决我的一个或两个问题的建议?
我目前正在考虑用泛型和反射做一些基本方法,以获得一些通用查询方法来减少重复(问题2)(我将把原型放到稍后查看)。
感谢, 安德斯