Maison  >  Article  >  Java  >  Pourquoi JPA ignore-t-il parfois l'annotation @Column dans Spring Boot ?

Pourquoi JPA ignore-t-il parfois l'annotation @Column dans Spring Boot ?

DDD
DDDoriginal
2024-10-28 20:26:02897parcourir

Why Does JPA Sometimes Ignore the @Column Annotation in Spring Boot?

Comprendre le remplacement des annotations de colonnes dans Spring Boot JPA

Spring Boot JPA, un framework ORM populaire, permet aux développeurs d'annoter des entités avec @Column pour spécifiez des noms de colonnes spécifiques dans la base de données. Cependant, il a été observé que dans certains scénarios, JPA peut ignorer l'annotation @Column et utiliser par défaut la version soulignée du nom de la propriété dans le schéma de la base de données.

Pourquoi JPA peut ignorer l'annotation de colonne

Une raison possible pour laquelle JPA ignore l'annotation @Column pourrait être la stratégie de dénomination utilisée par le framework Hibernate sous-jacent. Par défaut, Hibernate utilise la stratégie org.hibernate.cfg.ImprovedNamingStrategy, qui génère des noms de colonnes Snake Case quelle que soit l'annotation @Column.

Solution : stratégie de nommage EJB3

Pour résoudre ce problème et garantir que JPA respecte l'annotation @Column, vous pouvez définir explicitement la stratégie de nommage Hibernate sur org.hibernate.cfg.EJB3NamingStrategy. Cette stratégie préservera la casse et l'espacement des caractères spécifiés dans l'annotation @Column.

Considérations sur le dialecte SQL Server

Si vous vous connectez à Microsoft SQL Server, vous pouvez rencontrer un problème différent où Hibernate utilise le dialecte org.hibernate.dialect.SQLServerDialect. Ce dialecte peut conduire à des incohérences de dénomination, où JPA peut utiliser des noms de colonnes à casse mixte, même avec la stratégie de dénomination EJB3.

Stratégies de dénomination implicites et physiques héritées

Pour résoudre ce problème, vous pouvez ajouter les propriétés suivantes à votre fichier application.properties :

<code class="properties">spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl</code>

Ces paramètres forceront Hibernate à utiliser les stratégies de dénomination Legacy Implicit et Standard Physical, ce qui garantira que l'annotation @Column est respecté et les noms de colonnes sont générés de manière cohérente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn