Comment utiliser JPA Requête pour insérer des données dans la db?
J'ai un problème avec ma déclaration préparée à l'avance, mais je n'arrive pas à comprendre où est l'erreur. Je suis en train d'insérer une URI link dans la base de données.
@Repository
public interface LoggerDao extends CrudRepository<Logger, Long> {
@Query("select t from Logger t where t.user.id=?#{principal.id}")
List<Logger> findAll();
@Modifying
@Query(value = "insert into Logger t (t.redirect, t.user.id) VALUES (:insertLink,?#{principal.id})", nativeQuery = true)
@Transactional
void logURI(@Param("insertLink") String insertLink);
Erreur
2017-03-11 19:52:59.157 WARN 65154 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 42001, SQLState: 42001
2017-03-11 19:52:59.157 ERROR 65154 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : Syntax error in SQL statement "INSERT INTO LOGGER T[*] (T.REDIRECT, T.USER.ID) VALUES (?,?) "; expected "., (, DIRECT, SORTED, DEFAULT, VALUES, SET, (, SELECT, FROM"; SQL statement:
insert into Logger t (t.redirect, t.user.id) VALUES (?,?) [42001-190]
2017-03-11 19:52:59.181 ERROR 65154 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into Logger t (t.redirect, t.user.id) VALUES (?,?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement] with root cause
org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "INSERT INTO LOGGER T[*] (T.REDIRECT, T.USER.ID) VALUES (?,?) "; expected "., (, DIRECT, SORTED, DEFAULT, VALUES, SET, (, SELECT, FROM"; SQL statement:
insert into Logger t (t.redirect, t.user.id) VALUES (?,?) [42001-190]
at org.h2.engine.SessionRemote.done(SessionRemote.java:624) ~[h2-1.4.190.jar:1.4.190]
at org.h2.command.CommandRemote.prepare(CommandRemote.java:68) ~[h2-1.4.190.jar:1.4.190]
at org.h2.command.CommandRemote.<init>(CommandRemote.java:45) ~[h2-1.4.190.jar:1.4.190]
at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:494) ~[h2-1.4.190.jar:1.4.190]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1188) ~[h2-1.4.190.jar:1.4.190]
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:72) ~[h2-1.4.190.jar:1.4.190]
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:276) ~[h2-1.4.190.jar:1.4.190]
at org.apache.tomcat
Vous ne pouvez pas utiliser une clause where directement avec INSERT. Qu'essayez-vous de réaliser? Pour moi, la déclaration ne fait pas de sens.
semble que vous devriez utiliser
J'ai une instruction de mise à jour, mais depuis il n'y a rien dans le champ mise à jour il ne les exécute pas.
je suis en train d'enregistrer un nom URI dans la base de données
Depuis
semble que vous devriez utiliser
UPDATE
au lieu de INSERT
J'ai une instruction de mise à jour, mais depuis il n'y a rien dans le champ mise à jour il ne les exécute pas.
je suis en train d'enregistrer un nom URI dans la base de données
Depuis
INSERT INTO
ajoute de nouveaux enregistrements (lignes) dans la table, il n'est pas logique d'utiliser le WHERE
clause. Soit vous souhaitez ajouter un nouvel enregistrement ou de mise à jour.
OriginalL'auteur Arthur Decker | 2017-03-11
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à résoudre le problème. J'ai ajouté un id pour les paramètres de sorte que je puisse passer dans l'identification de l'utilisateur, l'utilisation Principale dans le contrôleur.
OriginalL'auteur Arthur Decker
Il y a un moyen de le faire insère à l'aide obj (non indigène) requêtes (à l'aide de @Query & @de Modifier), mais il dépend de la db que vous utilisez. Ci-dessous travaillé pour moi dans Oracle (à l'aide de la Double table):
Voici un lien qui montre au fond de la db soutien sélectionnez stmts sans une clause from : http://modern-sql.com/use-case/select-without-from
OriginalL'auteur A.P