I'm new to all this Hibernate/JPA stuff, so i will try to be as clear as possible.
Is there any way in Hibernate to use createNativeQuery to select a single/or multiple fields in a query without using an Entity class as the return object ?
I'm trying to do this without using any XML related stuff.
Query query = getEntityManager().createNativeQuery("select name from contact where id_contact = :idContact", String.class);
query.setParameter("idContact", 9293L);
Object string = query.getSingleResult();
System.out.println(string);
Using this i have the Exception : Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown entity: java.lang.String
Thanks
Edit :
I also tried :
Query query = getEntityManager().createNativeQuery("select name from contact where id_contact = :idContact");
query.setParameter("idContact", 9293L);
List list = query.getResultList();
if (!list.isEmpty()){
Object string = list.get(0);
System.out.println(string);
}
With the same Exception : Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;
Edit (2) : I'm starting to think it's either a bug in Hibernate or it's impossible to do such things...
The problem is that you are passing String.class as the second parameter to createNativeQuery. This will make hibernate attempt to use the String.class to create a mapping for the result set. It can only create this mapping from entity classes and String is not an entity class because it isn't mapped to a table.
Fortunately, the solution is to simply use an overloaded version of createNativeQuery that doesn't require a second parameter.
String SQL = ".."; //same SQL as you had before
Query query = getEntityManager().createNativeQuery(SQL); //no entity mapping
query.setParameter("idContact", 9293L);
Object string = query.getSingleResult();
System.out.println(string);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With