112 votes

Comment mapper un champ d'entité dont le nom est un mot réservé en JPA

@Column(name="open")

Utilisation du dialecte sqlserver avec hibernate.

[SchemaUpdate] Non réussi : créer la table auth_session (id numeric(19,0) identity not null, active tinyint null, creation_date datetime not null, last_modified datetime not null, maxidle int null, maxlive int null, open tinyint null, sessionid varchar(255) not null, user_id numeric(19,0) not null, primary key (id), unique (sessionid))
[SchemaUpdate] Erreur de syntaxe près du mot-clé 'open'.

J'aurais pensé qu'hibernate utiliserait un identifiant entre guillemets lors de la création de la table.

Des idées sur la façon de gérer cela... autre que de renommer le champ?

0 votes

12voto

Ahmed Ashour Points 449

Il existe également une autre option: hibernate.auto_quote_keyword

qui

Indique s'il faut automatiquement mettre entre guillemets les noms considérés comme des mots-clés.

Yaml

spring:
  jpa:
    properties:
      hibernate:
        auto_quote_keyword: true

3voto

Bozho Points 273663

Non - changez le nom de la colonne.

Cela dépend de la base de données, et vous ne pouvez tout simplement pas créer une telle colonne. Après tout, Hibernate envoie finalement du DDL à la base de données. Si vous ne pouvez pas créer un DDL valide avec ce nom de colonne, cela signifie qu'Hibernate ne le peut pas non plus. Je ne pense pas que les guillemets résoudraient le problème même si vous écriviez le DDL.

Même si vous réussissez d'une manière ou d'une autre à échapper au nom - changez-le. Cela fonctionnera avec cette base de données, mais ne fonctionnera pas avec une autre.

3voto

Neil Stockton Points 1273

Certaines implémentations de JPA (par exemple celle que j'utilise, DataNucleus) mettent automatiquement en guillemets l'identifiant pour vous, vous n'aurez donc jamais ce problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X