2017-08-11 1 views
0

J'ai un problème lors de l'exécution d'une instruction avec JPA/Hibernate.Hibernate: Erreur: Vous avez une erreur dans votre syntaxe SQL

J'essaie d'insérer un enregistrement. La déclaration sera imprimé à la console:

Hibernate: insert into loan (amount, auto_renew, billed, billing_date, close_date, comment, currency_id, date_offer_added, duration, earned, interest_abs, loan_ext_id, open_date, operator_fee_abs, operator_fees, platform_fee_abs, platform_fees, range, rate, source_systems_id, user_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
09:32:56.396 [default] [XNIO-2 task-6] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 1064, SQLState: 42000 
09:32:56.398 [default] [XNIO-2 task-6] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'range, rate, source_systems_id, user_id) values (0.43967500, 0, 0, null, '2017-0' at line 1 

Ma configuration de DB ressemble à ceci:

datasource:  
    # Local MYSQL DB 
    type: com.zaxxer.hikari.HikariDataSource 
    url: jdbc:mysql://localhost:3306/coinlender?useUnicode=true&characterEncoding=utf8&useSSL=false 
    username: root 
    password: 
jpa: 
    database-platform: org.hibernate.dialect.MariaDBDialect 
    database: MYSQL 
    show-sql: true 

Comment puis-je me rapprocher de la question? Je ne peux pas trouver la cause de l'erreur.

Quelqu'un peut-il m'aider s'il vous plaît?

Cordialement, David

+0

Malheureusement, pour vous, Vous avez choisi d'utiliser un fournisseur JPA qui ne nomme pas automatiquement les identifiants SQL. D'autres fournisseurs JPA peuvent le faire pour vous, mais pas le vôtre, donc vous devez soit changer vos identifiants pour ne pas être des mots-clés SQL !!!, ou vous devez les citer en utilisant '@ Column' etc !!! –

+0

@NeilStockton Hibernate le fait, si vous utilisez HQL. Mais cela ressemble à une requête SQL et aucun fournisseur JPA n'échappe à quoi que ce soit – Jens

Répondre

1

range est un keyword dans une base MySQL. Ne l'utilisez pas comme nom de colonne.

BTW si vous utilisez Hibernate/JPA vous devez utiliser HQL/JPQL pas simple sql

+0

Merci beaucoup, j'ai rebaptisé la colonne et ça fonctionne comme un charme! – dave0688

+0

@ dave0688 Vous êtes les bienvenus – Jens

-2

Vous devriez essayer

insert into loan (amount, auto_renew, billed, billing_date, close_date, comment, currency_id,date_offer_added, duration, earned, 
interest_abs, loan_ext_id, open_date, operator_fee_abs, operator_fees, platform_fee_abs, platform_fees, range, rate, 
source_systems_id, user_id) 
values ('?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?',' ?') 

au lieu de cette

insert into loan (amount, auto_renew, billed, billing_date, close_date, comment, currency_id,date_offer_added, duration, earned, 
interest_abs, loan_ext_id, open_date, operator_fee_abs, operator_fees, platform_fee_abs, platform_fees, range, rate, 
source_systems_id, user_id) 
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
+0

C'est ce que me donne la console. Puisque c'est une déclaration préparée, elle me donne seulement? pour chaque valeur – dave0688