web-dev-qa-db-fra.com

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

Cela peut sembler stupide pour vous, Mais pourquoi dois-je définir un constructeur vide dans mon @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 ne le redéfinissez pas).

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-en un autre avec des paramètres).

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

28
sliders_alpha

Un constructeur vide est nécessaire pour créer une nouvelle instance via une réflexion par votre cadre 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 de printemps sont présentes dans votre projet. Ainsi, vous pouvez également éviter le constructeur vide. 

36
u6f6o

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

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

23
Juned Ahsan

La définition explicite d'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, à part un avec la signature du constructeur par défaut, le constructeur par défaut ne sera pas créé.

Les implémentations JPA reposant sur l’existence d’un constructeur par défaut, il est nécessaire d’inclure le constructeur par défaut qui sera omis.

5
Kevin Bowersox

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 persistance utilisent souvent la réflexion et plus particulièrement Class<T>.newInstance() pour instancier vos objets, puis appelez les accesseurs/régleurs par introspection pour définir les champs.

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

Voir cette question de StackOverflow sur les constructeurs vides dans Hibernate.

3
Arnaud Denoyelle

En fait, vous n'avez pas besoin de l'écrire. Vous l'avez par défaut. Parfois, vous pouvez créer le constructeur private pour empêcher les utilisateurs d’utiliser des valeurs par défaut.

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 plug-in Gson pour convertir les données String Json en objet, vous devez écrire le constructeur par défaut, sinon cela ne fonctionne pas

1
Maxim Shoustin

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

0
gjman2