2016-04-13 19 views
2

UserDao sınıfının tüm CRUD yöntemlerine sahip olacağım GenericDAO'yu genişletmesini istiyorum. IBM'den makale okudum: http://www.ibm.com/developerworks/java/library/j-genericdao/index.html, ancak bunu uygulayamadım. Birisi bana özel UserDao sınıfına göre örnek gösterebilir. GenericDAO sınıfı Hazırda bekletme modunu nasıl uygular

@Transactional(value="myTransactionManager") 
public class UserDao { 

    @Qualifier("mySessionFactory") 
    public SessionFactoryImpl sessionFactory; 

    public void setSessionFactory(SessionFactoryImpl sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    public List<UserEntity> getAll() { 
     Query query = sessionFactory.getCurrentSession().createQuery(
       "from UserEntity "); 
     List<UserEntity> userList = query.list(); 
     return userList; 
    } 

    public void updaet(UserEntity userEntity) { 
     sessionFactory.getCurrentSession().update(userEntity); 
    } 

    public void delete(UserEntity userEntity) { 
     sessionFactory.getCurrentSession().delete(userEntity); 
    } 

    public void save(UserEntity userEntity) { 
     sessionFactory.getCurrentSession().save(userEntity); 
    } 

} 

Bu

public class GenericDao{ 

    @Qualifier("mySessionFactory") 
    public SessionFactoryImpl sessionFactory; 

    public void setSessionFactory(SessionFactoryImpl sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    public <T> List<T> getAll(Class<T> t) { 
     Query query = sessionFactory.getCurrentSession().createQuery(
       "from " + t.getName()); 
     List<T> list = query.list(); 
     return list; 
    } 

    public <T> void save(T t) { 
     sessionFactory.getCurrentSession().save(t); 
    } 

    public <T> void update(T t) { 
     sessionFactory.getCurrentSession().update(t); 
    } 

    public <T> void delete(T t) { 
     sessionFactory.getCurrentSession().delete(t); 
    } 
} 

gibi sınıf yazmak çalıştı ama böyle UserDao ile veri çekmek için deneyin:

public List<UserEntity> getAll() { 
    List<UserEntity> list = UserDao.findAll(); 
} 

Eclipse IDE hattı List<UserEntity> list = UserDao.findAll(); vermek hatası: yöntemi UserDao için findAll() gereği yok. Sen GenericDao, `GenericDao türünü geçmesi gerekiyor

@Entity 
@Table(name = "...")  
public class User extends DbObject { 
} 
+0

:

GenericDao:

@Repository public class GenericDao<T extends DbObject> { @Autowired private SessionFactory sessionFactory; private Class<T> getParameterizedClass() { return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } public T findById(final Serializable id) { return (T) getCurrentSession().get(getParameterizedClass(), id.toString()); } public void persist(final T object) { getCurrentSession().persist(object); } public void saveOrUpdate(final T object) { getCurrentSession().saveOrUpdate(object); } public void delete(final T object) { getCurrentSession().delete(object); } public T merge(final T object) { return (T) getCurrentSession().merge(object); } } 

UserDao:

public class UserDao extends GenericDao<User> { } 

Varlık – dambros

+0

' UserDao 'genişlemez' Jenerik Noktası 'Jenerikleri sınıf tanımına eklemezsiniz. 'GenericDao ' – Jens

+0

UserDao, GenericDao ürününü açıklamamaktadır. Ama uzattığımda, açıklandığı gibi hata veriyor. –

cevap

1

bu

benim uygulamasıdır `ve onu genişletir, açıkça ...
+0

bu yöntemin ne anlama geldiği: özel Sınıf getParameterizedClass() { return (Sınıf ) ((ParameterizedType) getClass(). GetGenericSuperclass()) getActualTypeArguments() [0]; } –

İlgili konular