2010-10-05 6 views
3

J'ai utilisé ImprovedNamingStrategy en mode hibernate pour mapper le nom de champ Java en nom de colonne MySQL.Mappage des noms de colonne et de table dans EclipseLink

ex) champ birthDate -> colonne birth_date, classe AccountRole -> table account_role

que je fais tester la migration code mise en veille prolongée au code EclipseLink.

Quel est l'équivalent dans EclipseLink de la classe ImprovedNamingStrategy d'hibernamte?

Répondre

2

Je ne pense pas qu'il y ait un équivalent.

Où utilisez-vous? Pour l'auto-mappage? Vous pouvez utiliser un outil JPA (tel qu'Eclipse Dali) qui génère le JPA orm.xml ou des annotations à partir d'un modèle d'objet, ils peuvent donner plus de contrôle sur la façon dont le modèle de données est généré.

En général, l'utilisation de JPA, mais pas la dénomination par défaut standard ne sera pas portable. Si vous souhaitez utiliser un mappage différent de celui par défaut, vous devez utiliser l'annotation @Column ou xml.

+0

Merci pour la réponse. Actuellement retourné à l'utilisation d'Hibernate. Je vais essayer EclipseLink plus tard encore. – drypot

4
public class MyCustomizer implements SessionCustomizer { 

    public void customize(Session session) throws Exception { 
     Map<Class, ClassDescriptor> descs = session.getDescriptors(); 
     Collection<ClassDescriptor> descriptors = descs.values(); 
     for (ClassDescriptor desc : descriptors) { 
      updateMappings(desc); 
     } 
    } 

    private void updateMappings(ClassDescriptor desc) { 
     for (DatabaseMapping mapping : desc.getMappings()) { 
      if (mapping.isDirectToFieldMapping()) { 
       DirectToFieldMapping directMapping = (DirectToFieldMapping) mapping; 
       String name = directMapping.getAttributeName(); 
       String regex = "([a-z])([A-Z]+)"; 
       String replacement = "$1_$2"; 
       String newName = name.replaceAll(regex, replacement) 
         .toUpperCase(); 
       directMapping.getField().resetQualifiedName(newName); 
      } 
     } 
    } 
} 

Insérer dans la propriété persistence.xml:

<property name="eclipselink.session.customizer" value="com.test.MyCustomizer" /> 
Questions connexes