Bonjour!

Je dois faire une méthode de recherche dans une base de donnée hibernate suivant des critères que je fournis. La méthode me rend une liste d'objet java.
Par exemple rechercher un utilisateur dont le nom comporte *alex*, dont l'adresse (clé étrangère - ManyToOne) est situé en france, avec le profil (clé étrangère - ManyToOne) dont le libellé comporte *superviseur*, ...

Il faut donc filtrer dans la table utilisateur le nom, puis aller regarder dans les tables des clés étrangères (juste mappé avec un id ) pour filtrer sur leurs propriétés.


Les objets et attributs de ma base risquent de changer fréquemment, et il hors de question de refaire les interfaces à chaque fois.
C'est à dire faire une méthode getUserByName, getUserByProfil, ...

Donc pour faire générique je veux comme méthode:
donner en paramètre le type T de l'objet que je cherche (ici Utilisateur) et qui sera retourné dans une liste

une hashTable qui contient SUIVANT le type de la value associé à une key:
value!=HashTable : une propriété 'locale' sur la table T (ici : {'name', '*alex*', 'age', '25', ...)
value==HashTable : une propriété sur une table d'une clé étrangère (ici : {'adresse', HashTable h1, ... } avec h1 : {'pays', 'France', ...} )


Sachant que h1 peut alors lui aussi du coup contenir des propriétés sur les tables des clés étrangères de Adresse!


Du coup le prototype de ma fonction serait:
public List<E> getListObjectByCriteria(Class<E> classReturn, HashSet<Object> listCriteria);

Pour dire que E est la classe sur laquel je fait ma recherche.

Mais E ne passe pas :
Multiple markers at this line
- E cannot be resolved
to a type


Et on me propose:
public List<?> getListObjectByCriteria(Class<?> classReturn, HashSet<Object> listCriteria);
OU
public <E> List<E> getListObjectByCriteria(Class<E> classReturn, HashSet<Object> listCriteria);

? est un joker donc ça ok je comprends. Mais par contre la deuxième forme ne me parle pas... Comment dois-je l'interpréter et après comment serait-elle utilisée/appelée?

Et sinon que pensez vous de ma solution? Auriez vous une autre idée?


Ps: pour la réaliser je me sert de l'API Criteria d'Hibernate (en mappant les critères avec Restriction en me servant d'alias pour les clés étrangère)