【发布时间】:2014-11-06 15:02:12
【问题描述】:
嘿,我想要一个通用模型/实体类,它可以通过 id 类型的 long 元素从 db 下载。方法是这样的:
public class GenericModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
public static GenericModel getBy(Long id) {
return JPA.em().find(GenericModel.class, id);
}
}
但在将由子模型类扩展的通用模型中,我必须动态声明实体类名称才能在 db 中找到。
我想有一个通用实体类,我将有像 getById() 这样的通用方法。并且该通用类将由具体实体类扩展。我不必在每个模型类中编写相同的方法,因为它会从泛型类继承——
我怎样才能做到这一点?
这是我的 DAO 界面。我不太确定:
public interface GenericModelDao<T> {
public void add(T entityClass);
public void update(T entityClass);
public void delete(long id);
public T get(long id);
public List<T> get();
}
以及这个接口的My DAO实现类
@Repository
public class GenericModelDaoImpl <T extends GenericModel> implements GenericModelDao {
public Class<T> entityClass;
GenericModelDaoImpl(){
setEntityClass(((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
}
public void setEntityClass(Class<T> entityClass) {
this.entityClass = entityClass;
}
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
@Override
public T get(long id) {
return (T) getCurrentSession().get(entityClass, id);
}
@Override
public void delete(long id) {
T entityClass = get(id);
getCurrentSession().delete(entityClass);
}
@Override
public List<T> get() {
return getCurrentSession().createQuery("from " + entityClass ).list();
}
@Override
public void add(Object entityClass) {
getCurrentSession().save(entityClass);
}
@Override
public void update(Object entityClass) {
getCurrentSession().update(entityClass);
}
}
还有我的 GenericModel 类
@MappedSuperclass
public abstract class GenericModel<T extends GenericModel> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
请再给我一些额外的帮助:D
【问题讨论】:
-
我很难理解你想做什么。
-
我想要一个通用的实体类,我将有像 getById() 这样的通用方法。并且该通用类将由具体实体类扩展。我不必在每个模型类中编写相同的方法,因为它将继承自泛型类
标签: java spring jpa model entity