Je demande dépôt similaire au printemps de données JPA où je ne créer une interface d'un référentiel d'entité:Obtenir classe Entité JPA et interface Repository
public interface AuthorRepository extends Repository<Author, Long> {
}
Je cette interface aussi Repository:
public interface Repository <T, ID extends Serializable> {
List<T> findAll() throws Exception;
}
et sa mise en œuvre, que je trouve qu'il est difficile d'obtenir le nom de la classe adoptée en tant que paramétrés (T) au référentiel:
public class RepositoryImpl implements Repository {
@Inject
private EntityManager em;
@Override
public List<Object> findAll() throws Exception {
try {
String namedQuery = "SELECT a FROM " + <How do I get the entity here as Author?> + " a";
TypedQuery<Object> query = em.createNamedQuery(namedQuery, <How do I get the entity class as Author.class?>);
return query.getResultList();
} catch (Exception e) {
System.out.println(e.getMessage());
throw new ApplicationException();
}
}
}
Je ne peux pas trouver comment générer manière dynamique la classe d'entité (ex. Auteur) à créer dans le cadre de NamedQuery chaîne et un argument pour em.createNamequery().
Merci pour toute aide.
Peut-être utilisé? https://stackoverflow.com/questions/3437897/how-to-get-a-class-instance-of-generics-type-t –
Merci pour le lien. J'ai vu beaucoup de réponses similaires. J'ai même suivi la conception et les codes [ici] (https://developer.jboss.org/wiki/GenericDataAccessObjects), mais aucun d'eux n'avait fonctionné. J'ai toujours obtenu ClassCastException. Merci à [TypeTools] (https://github.com/jhalterman/typetools). Il fonctionne comme un charme. –