我正在尝试为常见的数据库函数编写BaseDao类,如findAll,findById,insert,update,deleteById等。
我接受了BaseDao.java接口,另一个类BaseDaoAdapter.java实现了BaseDao.java。
这个Dao注入服务。因此,需要通用CRUD功能的服务类将使用此Dao,而那些需要特定功能的服务类将拥有自己的Dao。
我们这样做是为了减少Dao层的代码重复。
我写的类的代码如下。
@Repository
public class BaseDaoAdapter {
private EntityManagerFactory emf;
@PersistenceUnit
public void setEntityManagerFactory(EntityManagerFactory emf) {
this.emf = emf;
}
/**
*
* @param tableName Name of table from which data has to be retrieved
* @return A list of all the records in the specified table
*/
@SuppressWarnings("unchecked")
public List<? extends BaseEntity> list(String tableName){
EntityManager em = emf.createEntityManager();
Query q =em.createQuery("SELECT A FROM "+tableName+" A");
return q.getResultList();
}
/**
*
* @param obj An object of the entity that is to be inserted into the database.
*/
public void add(BaseEntity obj){
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(obj);
em.getTransaction().commit();
em.close();
}
/**
*
* @param obj Entity object to be deleted from the database
*/
public void remove(BaseEntity obj){
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.remove(obj);
em.getTransaction().commit();
em.close();
}
}
这里BaseEntity是所有域类实现的接口。
当我尝试将查询返回的列表强制转换为任何特定于域的列表(例如List)时,(?extends BaseEntity)语法有时会出错。
我们这样做是因为我们只希望返回特定于域的列表。
我想在这里问两个问题。
答案 0 :(得分:0)
我建议您仔细阅读有关Polymorphism主题的Google App Engine文档。可能尚不支持某些JDO继承关系。此外,如果您尝试使用此方法,也可以存储Key引用。