これは私の送信者エンティティです
@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;
}
}
次のクエリを実行しようとすると:
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();
次のエラーが発生します。
エラー: org.hibernate.property.BasicPropertyAccessor - HHH000123: クラスの IllegalArgumentException: be.gimme.persistence.entities.Sender、プロパティのセッター メソッド: senderId
エラー: org.hibernate.property.BasicPropertyAccessor - HHH000091: 予想される型: long、実際の値: java.math.BigInteger
これは、クラス Sender の senderId が実際には BigInteger (Hibernate によって返される) ではなく long であるために発生します。
このような場合のベストプラクティスは何だろうと思っていましたが、ID として BigIntegers を使用する必要がありますか (少しやり過ぎのようです)。
クエリ結果をクラス Sender のオブジェクトに手動で変換する必要がありますか (それは残念です)。または、Hibernateが slong
の代わりに IDを返すようにすることはできBigInteger
ますか? または他のアイデアはありますか?
Spring、Hibernate 4.1.1、および MySQL を使用しています