Hibernate retourne BigIntegers au lieu de aspire

C'est mon Expéditeur entité

@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;
    }
}

Lorsque j'essaie d'exécuter la requête suivante:

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();

L'erreur suivante se passe:

ERREUR: org.mise en veille prolongée.de la propriété.BasicPropertyAccessor - HHH000123: IllegalArgumentException dans la classe:.gimme.la persistance.les entités.De l'expéditeur, la méthode de définition de la propriété: senderId

ERREUR: org.mise en veille prolongée.de la propriété.BasicPropertyAccessor - HHH000091: type: long, de la valeur réelle: java.les mathématiques.BigInteger

Cela se produit parce que le senderId dans la classe de l'Expéditeur est en fait un long au lieu d'un BigInteger (qui est retourné par la mise en veille).

Je me demandais quelle est la meilleure pratique dans un cas comme celui-ci, dois-je utiliser BigIntegers que des id (Semble un peu de trop)?

Devrais-je convertir les résultats de la requête pour les objets de la classe Expéditeur manuellement (ce Qui serait dommage)? Ou puis-je simplement faire Hibernate retour long id au lieu de BigIntegers? Ou d'autres idées?

Je suis en utilisant Spring, Hibernate 4.1.1 et MySQL

est-il un grand type entier dans votre base de données? Assurez-vous que vos objets de mappage sont à droite.
Oui, ils sont tous de type BIGINT(20). Mais ceux sont des tables générées par Hibernate.
Il y a beaucoup de choses pas clair ici. Votre correspondance doit être à droite de la db, quelle que soit la raison. J'exclure implicite de boxe, unboxing et coulée de questions. Transformers.aliasToBean peut carte mal db pour objet de classe si vous avez le mélange des noms.
J'ai ajouté mon Expéditeur de l'entité à la question. Mais je ne pense pas que le long de l'id ne doit pas être Mappé BIGINT(20) de MySQL (Quel autre type serait correct dans MySQL?).
vous pouvez changer de type BIGINT(20) de type int? parce que BigInteger ne peut pas être jeté à long implicitement.

OriginalL'auteur Tristan Van Poucke | 2013-09-12