Bonjour,
j'utilise le pattern Dao, pour implémenter la couche d'accès aux données, j'ai donc créé une interface générique comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
public interface GenericDAO<T, PK extends Serializable> {
 
	 /** Persist the newInstance object into database */
    void create(T newInstance);
 
...
}
une implémentation de cette interface en utilisant le framework Hibernate:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
public  class GenericDAOImpl<T, Pk extends Serializable> implements GenericDAO<T, Pk >{
 
	private Class<T> type;
	private Session session;
 
 
	public GenericDAOImpl(Class<T> classe) {
		this.type = classe;
	}
 
 
	@Override
	public void create(T newInstance) {
		try{
			this.session = HibernateUtil.getSession();
			this.session.beginTransaction();
			this.session.save(newInstance);
			this.session.getTransaction().commit();
			System.out.print("oui");
		}
		catch (HibernateException e){
			System.out.print(e.getMessage());
		}
	}
 
...}
mais je ne comprends pas la différence entre Class<T> et T ? parce que j'ai fait ceci,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public T read(Pk id) {
		try {
			this.session = HibernateUtil.getSession();
			this.session.beginTransaction();
			this.type = (Class<T>)this.session.get(this.type, id);
 
 
		} catch (HibernateException e) {
			System.out.print(e.getMessage());
		}
		return (T) this.type;		
	}
mais malheureusement, le read ne marche pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
GenericDAO<Projet,Integer> genericDAO = new GenericDAOImpl<Projet, Integer>(null);
Projet projet2 = new Projet();
	projet2 = genericDAO.read(2);
	System.out.print(projet2.getNom());
je ne comprends ce 'null'.

pourquoi c'est permis de faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
private  Class<Projet> projet;
private  ProjetDAO projetDAO =  new ProjetDAOImp(projet );
Projet p = new Projet();
p.setNom("projet1");
projetDAO.create(p);
et merci d'avance.