hibernate ImprovedNamingStrategy remplace nom de la Table dans l'entité
Je suis en utilisant org.mise en veille prolongée.cfg.ImprovedNamingStrategy, Mais pour une table, j'ai précisé le nom de la table explicitement
@Table(name="EventLog",schema = "eventlogs")
Mais hibernate semble être à la recherche pour event_log. Ne devrait pas explicite de nommage de remplacer celui fourni par ImprovedNamingStrategy
- Les Annotations devraient avoir une priorité sur la stratégie de nommage. Êtes-vous à l'aide de @org.mise en veille prolongée.les annotations.La Table ou @javax.la persistance.La Table? Peut-être essayer l'autre?
Vous devez vous connecter pour publier un commentaire.
C'est le comportement de l'org.mise en veille prolongée.cfg.ImprovedNamingStrategy , qui permettra de convertir les noms de cas mixtes à l'embedded souligne nom . http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/cfg/ImprovedNamingStrategy.html . Donc, si vous utilisez explicitement le nom de "Journal" , il vous permet de convertir à la "event_log" .
Si vous souhaitez simplement utiliser le nom spécifié explicitement dans le
@Table
, vous devez utiliser le org.mise en veille prolongée.cfg.DefaultNamingStrategy . Par défaut, il est utilisé lorsque vous instanciez votre org.mise en veille prolongée.cfg.L'objet de Configuration deSi vous souhaitez utiliser le ImprovedNamingStrategy pour toutes les tables à l'exception de ceux qui spécifiez un nom explicitement, vous pouvez utiliser la sous-classe ci-dessous. Le columnName et tableName méthodes sont ceux appelés quand un nom est spécifié de manière explicite, cette sous-classe feuilles les noms spécifiés sans être inquiété.
Je pense que c'est bizarre que ce n'est pas le comportement par défaut.
@Table
annotation, DefaultNamingStrategy suppose que le nom de la table est le nom de classe sans qualification; c'est à dire le nom de la table généré pour la classe x.x.AccountStatus serait "AccountStatus'. Si vous spécifiez un nom de paramètre dans la@Table
attribut, il va utiliser tout ce qui est à la place. La table des noms générés par ImprovedNamingStrategy faveur de soulignement à la place de chameau cas, c'est à dire 'account_status' ImprovedNamingStrategy ignore le nom de paramètre dans la@Table
annotation, ma suggestion est tout simplement le respect le nom du paramètre lorsqu'il est présent.Vous pouvez explicitement conseiller d'hibernation pour utiliser l'ancien EJB3NamingStrategy qui reconnaît la annoté les noms de table en définissant la propriété suivante (en fonction de printemps V4+ ou pas):
Printemps:
Pas de ressort (seulement la mise en veille):
pour hibernate 4 avec le printemps
pour hibernate5 avec le printemps