This is my Sender entity
@Entity
public class Sender {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long senderId;
...
...
public long getSenderId() {
return senderId;
}
public void setSenderId(long senderId) {
this.senderId = senderId;
}
}
When I try to execute following query:
StringBuilder query = new StringBuilder();
query.append("Select sender.* ");
query.append("From sender ");
query.append("INNER JOIN coupledsender_subscriber ");
query.append("ON coupledsender_subscriber.Sender_senderId = sender.SenderId ");
query.append("WHERE coupledsender_subscriber.Subscriber_subscriberId = ? ");
SQLQuery q = (SQLQuery) sessionFactory.getCurrentSession().createSQLQuery(query.toString());
q.setResultTransformer(Transformers.aliasToBean(Sender.class));
q.setLong(0, subscriberId);
return q.list();
The following error occures:
ERROR: org.hibernate.property.BasicPropertyAccessor - HHH000123: IllegalArgumentException in class: be.gimme.persistence.entities.Sender, setter method of property: senderId
ERROR: org.hibernate.property.BasicPropertyAccessor - HHH000091: Expected type: long, actual value: java.math.BigInteger
This happens because the senderId in the class Sender is actually a long instead of a BigInteger (which is returned by Hibernate).
I was wondering what the best practice was in a case like this, should I be using BigIntegers as id's (Seems a bit of an overkill)?
Should I convert the query results to objects of class Sender manually (That would be a pitty)? Or can I just make Hibernate return long
id's instead of BigInteger
s? Or any other ideas?
I'm using Spring, Hibernate 4.1.1 and MySQL
The default for ".list()" in hibernate appears to be BigInteger return types for Numeric. Here's one work around:
Adding to #Hedley comment to fix it globally you can add a line in SQLDialect constructor. In my project it was like:
Object database mapping is wrong. There is a casting exception here saying database field is
BigInteger
, but object property islong
.BigInteger
is a special class to hold unlimited size integer values. Furthermore,BigInteger
can not cast to long implicitly.To avoid this error database field which is
BigInteger
should be change tolong
compatible type. Change it to aint
type where int can be casted tolong
implicitly. See BigInteger.In older versions of Hibernate you can use
you can check on following link check here for BigInteger identity generator class