在 JPA 中,实体是带有很好注释的普通 Java 对象。但是我还没有找到与它们和数据库交互的好方法。
在我当前的应用程序中,我的基本设计始终是将基于序列的 id 作为主键,因此我通常必须通过 PK 以外的其他属性查找实体。
对于每个实体,我都有一个无状态的 EJB
@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 本地接口让我很恼火。
我讨厌我在每个方法中都有“try、createQuery、getResultList、catch、log、return”的重复(主要是Java中没有闭包或“with语句”或类似的结果)。
是否有人建议以更好的方式与解决我的一个或两个问题的实体和数据库进行交互?
我目前正在考虑使用泛型和反射做一些基本方法,以获得一些通用查询方法来减少重复(问题 2)(我稍后会提出一个原型供审查)。
谢谢,安德斯