我看到Hibernate Dao的this泛型。见内容。
public abstract class AbstractHibernateDao< T extends Serializable > {
private Class< T > clazz;
@Autowired
SessionFactory sessionFactory;
public final void setClazz( Class< T > clazzToSet ){
this.clazz = clazzToSet;
}
public T findOne( long id ){
return (T) getCurrentSession().get( clazz, id );
}
public List< T > findAll(){
return getCurrentSession().createQuery( "from " + clazz.getName() ).list();
}
public void create( T entity ){
getCurrentSession().persist( entity );
}
public void update( T entity ){
getCurrentSession().merge( entity );
}
public void delete( T entity ){
getCurrentSession().delete( entity );
}
public void deleteById( long entityId ){
T entity = findOne( entityId );
delete( entity );
}
protected final Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
}
然后是GenericDao
@Repository
@Scope( BeanDefinition.SCOPE_PROTOTYPE )
public class GenericHibernateDao< T extends Serializable >
extends AbstractHibernateDao< T > implements IGenericDao< T >{
//
}
然后是服务实施
@Service
class FooService implements IFooService{
IGenericDao< Foo > dao;
@Autowired
public void setDao( IGenericDao< Foo > daoToSet ){
dao = daoToSet;
dao.setClazz( Foo.class );
}
// ...
}
我不喜欢调用setClazz方法所需的方式,只是为了传递类。还有另一种方法吗?或者有没有办法在&lt;&gt;内调用Foo类。 IGenericDao&LT; Foo&gt;道;
感谢。
答案 0 :(得分:0)
我也遇到了同样的问题,但不幸的是我找不到一个干净的解决方案我只在AbstractHibernateDao中添加了一个抽象函数,它强制开发人员覆盖类的功能,这样他们就不会忘记错误地设置类。