Comment créer une table d'énumération Java en utilisant Eclipselink?


Je veux qu'une classe Java enum soit définie par les valeurs qui peuvent être trouvées dans une table de base de données.

Est-ce possible?? Comment?

J'ai essayé d'aller dans l'autre sens: Je me demande s'il est possible de laisser Eclipselink créer une table de base de données pour une énumération utilisée en Java? Disons que j'ai une énumération nommée Status avec les valeurs: AVAILABLE et OUT_OF_ORDER. Comment puis-je laisser JPA créer la table de base de données associée (qui devrait être une sorte de table de recherche pour s'assurer qu'il ne peut y avoir que des valeurs contenu dans ce tableau peut être utilisé dans les colonnes de tout autre tableau)?

Un autre exemple serait une bibliothèque d'enregistrements avec un enregistrement de classe (ou de table respectivement) qui a une propriété (colonne) 'recordType'.

public enum RecordType {
NONE,
LP,
SINGLE
}

Comment puis-je dire à JPA/Eclipselink de créer une table appelée recordType? L'utilisation des outils JPA - > Rendre persistant se termine par une erreur de persistance.xml: Listed class RecordType ne doit pas être une énumération .

Author: du-it, 2014-05-12

1 answers

Habituellement, vous ne créez pas de table avec les valeurs possibles de votre énumération (vous les avez déjà du côté client!)

Vous stockerez plutôt la valeur de l'énumération dans une colonne. JPA vous permet de stocker soit la valeur enum 0,1,2... (fortement déconseillé) ou la valeur de chaîne (DISPONIBLE, ... beaucoup mieux!)

@Table(name = "the_name_of_your_table")
public class YourClass {

  @column(name = "the_column_name")
  @Enumerated(EnumType.STRING) // <-Tells JPA to store the enum as a String
  private Status status; 

}
 1
Author: Arnaud Denoyelle, 2014-05-12 12:47:56