Entité Java-pourquoi ai-je besoin d'un constructeur vide?


Cela peut sembler stupide pour vous, mais pourquoi ai-je besoin de définir un constructeur vide dans mes @Entitys?

Chaque tutoriel que j'ai vu disait : chaque entité a besoin d'un constructeur vide.

Mais Java vous donne toujours un constructeur vide invisible par défaut (si vous n'en redéfinissez pas un).

Merci.

MODIFIER

Je pense qu'il y a un problème sémantique. Ce que j'ai compris par "besoin" était d'écrire.

Signification: écrivez toujours un constructeur vide dans votre entité.

Exemple:

@Entity
public class MyEntity implements Serializable {

   @Id
   private String str;

   public MyEntity(){}

   //here getter and setter
}

Mais Java vous donne toujours ce constructeur vide lorsque vous ne le redéfinissez pas (écrivez un autre avec des paramètres).

Dans ce cas, écrire ce constructeur vide semble inutile.

Author: Jack, 2013-08-07

7 answers

Un constructeur vide est nécessaire pour créer une nouvelle instance via la réflexion de votre framework de persistance. Si vous ne fournissez aucun constructeur supplémentaire avec des arguments pour la classe, vous n'avez pas besoin de fournir un constructeur vide car vous en obtenez un par défaut.

Vous pouvez également utiliser l'annotation @PersistenceConstructor qui ressemble à ce qui suit

@PersistenceConstructor
public Movie(Long id) {
    this.id = id;
}

Pour initialiser votre entité si des données Spring sont présentes dans votre projet. Ainsi, vous pouvez éviter le constructeur vide comme Bien.

 28
Author: u6f6o, 2013-08-07 09:14:52

Mais java vous donne toujours un constructeur vide invisible par défaut (si vous ne redéfinissez pas un).

Cette instruction n'est vraie que lorsque vous ne fournissez aucun constructeur dans votre classe. Si un constructeur d'argument est fourni dans votre classe, la jvm n'ajoutera pas le constructeur sans argument.

 21
Author: Juned Ahsan, 2013-08-07 09:08:00

Définir Explicitement un constructeur par défaut n'est pas nécessaire, sauf si vous fournissez un autre constructeur pour l'entité. Si vous fournissez un autre constructeur, en dehors d'un avec la signature du constructeur par défaut, le constructeur par défaut ne sera pas créé.

Depuis implémentations JPA dépendent de l'existence d'un constructeur par défaut, il est alors nécessaire d'inclure le constructeur par défaut qui sera omis.

 5
Author: Kevin Bowersox, 2013-08-07 09:15:09

Comme vous avez spécifié la balise "JPA", je suppose que votre question s'applique uniquement à JPA et non aux constructeurs vides en général.

Les frameworks de persitence utilisent souvent la réflexion et plus spécifiquement Class<T>.newInstance() pour instancier vos objets, puis appelez getters/setters par introspection pour définir les champs.

C'est pourquoi vous avez besoin d'un constructeur vide et de getters/setters.

Voir cette question StackOverflow sur les constructeurs vides dans Hibernate.

 3
Author: Arnaud Denoyelle, 2017-05-23 12:26:17

Fait, vous n'avez pas besoin de l'écrire. Vous avez par défaut. Parfois, vous pouvez créerprivate constructeur pour empêcher les utilisateurs d'utiliser default

public class MyClass{

private MyClass(){} 

} 

Pour les modèles singelton, par exemple, vous pouvez bloquer en utilisant le constructeur par défaut.

Parfois, lorsque vous utilisez le plugin Gson pour convertir des données Json en objet, il demande d'écrire le constructeur par défaut, sinon cela ne fonctionne pas

 1
Author: Maxim Shoustin, 2013-08-07 09:14:16

Java ne vous donne pas toujours un constructeur vide invisible par défaut si votre classe a un constructeur d'argument, vous devez définir le constructeur vide par vous-même.

 0
Author: gjman2, 2013-08-07 09:13:00

À partir de la balise JPA, je suppose que vous travaillez avec des beans Java. Chaque haricot doit avoir les propriétés suivantes:

  1. Getters et setters pour toutes ses principales variables d'instance.

  2. Un constructeur vide.

  3. Toutes ses variables d'instance doit, de préférence, être private.

Ainsi l'instruction : "chaque entité a besoin d'un constructeur vide".

 -1
Author: JavaNewbie_M107, 2013-08-07 09:10:35