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