Est-il possible de définir dynamiquement les noms de colonne dans Hibernate / JPA?
J'ai donc cette base de données existante schéma avec un nombre de tables que je veux modèle avec JPA/Hibernate. Chaque
le tableau est le même groupe de 30 colonnes supplémentaires ( pour permettre l'exécution de l'expansion du nombre de champs
enregistré).
CREATE TABLE XX
(
"ID" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"USER_LABEL" VARCHAR2(256 BYTE),
"CREATION_DATE" NUMBER(38,0) NOT NULL ENABLE,
"ADD_STR_FIELD_0" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_0" NUMBER(38,0),
"ADD_DBL_FIELD_0" NUMBER(38,0),
"ADD_STR_FIELD_1" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_1" NUMBER(38,0),
"ADD_DBL_FIELD_1" NUMBER(38,0),
"ADD_STR_FIELD_2" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_2" NUMBER(38,0),
"ADD_DBL_FIELD_2" NUMBER(38,0),
"ADD_STR_FIELD_3" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_3" NUMBER(38,0),
"ADD_DBL_FIELD_3" NUMBER(38,0),
"ADD_STR_FIELD_4" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_4" NUMBER(38,0),
"ADD_DBL_FIELD_4" NUMBER(38,0),
"ADD_STR_FIELD_5" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_5" NUMBER(38,0),
"ADD_DBL_FIELD_5" NUMBER(38,0),
"ADD_STR_FIELD_6" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_6" NUMBER(38,0),
"ADD_DBL_FIELD_6" NUMBER(38,0),
"ADD_STR_FIELD_7" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_7" NUMBER(38,0),
"ADD_DBL_FIELD_7" NUMBER(38,0),
"ADD_STR_FIELD_8" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_8" NUMBER(38,0),
"ADD_DBL_FIELD_8" NUMBER(38,0),
"ADD_STR_FIELD_9" VARCHAR2(200 BYTE),
"ADD_LNG_FIELD_9" NUMBER(38,0),
"ADD_DBL_FIELD_9" NUMBER(38,0),
}
J'ai l'intention de définir des classes simples pour chaque table
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="XX")
public class XX {
@Id
Long id = null;
}
puis à la définition des paramètres supplémentaires dans une classe commune
import javax.persistence.Column;
public abstract class AdditionalParameters {
@Column(name="ADD_STR_FIELD_0")
private String addStringField0 = null;
@Column(name="ADD_LNG_FIELD_0")
private Long addLongField0 = null;
@Column(name="ADD_DBL_FIELD_0")
private Double addDoubleField0 = null;
....
....
....
@Column(name="ADD_STR_FIELD_8")
private String addStringField8 = null;
@Column(name="ADD_LNG_FIELD_8")
private Long addLongField8 = null;
@Column(name="ADD_DBL_FIELD_8")
private Double addDoubleField8 = null;
}
alors que cela fonctionne, je n'aime pas le standard de la nature de la classe.
Je voudrais modèle de chaque ensemble de la chaîne,long et double les champs comme un paramètre supplémentaire de groupe, puis
0..9 groupes. Cela me permettrait facilement ajouter des groupes plus tard si nécessaire.
Si j'utilise le mappage xml solution je peux déterminer dynamiquement le bon nom de la colonne lors de la création .hbm.xml
pour chaque table. Je préfère utiliser un annotated solution, mais est-il un moyen de remplacer la Colonne @méthode getName()
afin que je puisse retourner généré dynamiquement, un nom de colonne?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer un personnalisé NamingStrategy.
En supposant que vous utilisez spring et hibernate avec JPA, voici un extrait de code de configuration avec une coutume NamingStrategy:
Si vous n'utilisez pas le printemps, la configuration sera différente, mais vous pouvez toujours utiliser un custom NamingStrategy (voir Mise en œuvre d'un NamingStrategy de la Documentation Hibernate).
De toute façon, voici un exemple de NamingStrategy qui crée la table des noms de la forme TYPE1_TYPE2 pour joindre des tables et ajoute un préfixe commun à toutes les tables: