web-dev-qa-db-fra.com

ID d'entité JPA - long ou Long

L'ID de votre entité doit-il être long (type primitif) ou Long (type d'objet)?

  • L'ID est la clé primaire de ma table et n'est jamais "nul" dans la base de données.
  • Mes collègues suggèrent d'utiliser un type d'objet long.
  • L'outil Hibernate Reverse Engeneering génère un type primitif long pour id par défaut.

Que choisir? long ou long?

@Entity
@Table(name = "COUNTRY")
public class CountryEntity implements Java.io.Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    private long id;
    @Column(name = "NAME")
    private String name;
    @Column(name = "CURRENCY")
    private String currency;
    @Column(name = "PEOPLE")
    private Long people;
    @Column(name = "SIZE")
    private Long size;

    public CountryEntity() {
    }
28
Dimitri Dewaele

Je considère qu'il est préférable d'avoir Long, car il est plus correct de vérifier si une entité a une identité persistante en vérifiant la valeur null (dans MySQL, vous pouvez avoir un ID de valeur 0). Certaines bibliothèques comme Spring se basent également sur un ID de type Long (par défaut) dans leur logique. Voir ceci implémentation pour un exemple.

Le petit avantage de la primitive: elle prend un peu moins de place.

PS: Les deux sont corrects et pris en charge selon les spécifications JPA et les réponses à cette question sont en quelque sorte basées sur l'opinion.

23
Andrei I

Je préfère Long, pour la simple raison que si vous laissez la base de données générer des identifiants pour vous (ce que vous devriez), vous pouvez dire qu'un objet CountryEntity récemment instancié n'est pas encore persisté en vérifiant id==null. Si vous utilisez long, id aura toujours une valeur non nulle (initialement 0), qui changera lors de la persistance de l'entité.

4
wallenborn

Je serai probablement flambé pour cela, mais ni l'un ni l'autre. Les champs d'ID ne doivent pas être représentés comme des types numériques dans Java sauf si vous prévoyez d'effectuer des calculs mathématiques sur eux. Utilisez plutôt String et vous ne rencontrerez pas de problèmes de débordement lorsque votre id dépasse la capacité de Long Essayez également de sérialiser un long 24 chiffres en JSON et vous aurez des ennuis.

1
i3ensays