
javax.persistence.PersistenceException org.hibernate.PropertyAccessException could not get a field value by reflection getter
28 Sep 2010
I have worked with hibernate now for 6 years. and yet..
Today I got this exception :
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of my.pkg.ClassName
which was caused by
Can not set java.lang.Long field ... to java.lang.Long
sounds strange and unclear, but the solution is pretty simple
The Problem
The problem is in the query.
The query I was trying to execute was something like :
Select * from A a where a.b = :b_val
B is another entity with an id.
When I tried to set the value for “b_val” I did the following :
B b = getB();
Query q = getQuery();
q.setParameter("b_val", b.id);
However, this is wrong. What I should be doing is :
q.setParameter("b_val", b);
And that is because Hibernate handles the foreign key, extracts the ID from “b” and takes it on from there.
But sometimes, as in this case, you don’t have the Object “b” but only the ID. So how do you override hibernate in this scenario?
The Solution
In case you only have the ID, you should modify the query as so:
Select * from A a where a.b.id = :b_val
note how I specify “id” after “a.b”.
This will generate the results you were after