I have a table fruit with four columns id, name, color, shape.
entries in the table would be:
1, apple, red, round
2, banana, yellow, long
3, tomato, red, round
4, orange, orange, round
Now I made an entity class Fruit mapped to above table.
@Entity
@Table(name="fruit")
public class Fruit implements Serializable {
@Id
@Column(name="ID")
String id;
@Column(name="NAME")
String name;
@Column(name="COLOR")
String color;
@Column(name="SHAPE")
String shape;
//getters/setters goes here
}
In my DAO class, the code is:
String myQuery = "Select f.shape, f.name from Fruit f where f.shape = :shape";
Query query = this.em.createQuery(myQuery);
query.setParameter("shape", "round");
As obvious, running above query will return 3 rows.
I have a simple TO class FruitSearchTO
class FruitSearchTO
{
String shape;
String name;
//getters/setters here
}
This TO complies with the rows returned by my query.
But in my DAO running something like:
List<FruitSearchTO> fruitList = new ArrayList<FruitSearchTO>();
fruitList = query.getResultList();
is throwing exception java.lang.ClassCastException: [Ljava.lang.Object; incompatible with FruitSearchTO]
Where am I going wrong and what is the solution to this ?
The HQL you’re using will return a
List<Object[]>, each element of theListbeing an array withshapein position 0 andnamein position 1.You can make the HQL return a
List<FruitSearchTO>using anAliasToBeanResultTransformer:Alternatively, if
FruitSearchTOhas an appropriate constructor:, you can also achieve this withselect new FruitSearchTO(f.shape, f.name).Take a look at the Hibernate Reference chapter on HQL, particularly 15.6 The
selectclause chapter.