2017-03-02 2 views
1

Est-il possible d'exécuter un script SQL qui ne renvoie pas ResultSet ou n'est pas un type de script INSERT ou UPDATE?Exécution d'une commande SQL avec EntityManager

Je suis en train de ce qui suit:

Query q = entityManager.createNativeQuery("DECLARE @max int;\n" + 
     "SELECT @max = MAX(customer_number)+1\n" + 
     "FROM organisation\n" + 
     "\n" + 
     "exec('ALTER SEQUENCE organisation_customer_number_seq RESTART WITH ' + @max)"); 

... mais bien sûr, qui crée juste la requête, comment l'exécuter? Je peux seulement trouver des getters pour différents types de resultsSets et la méthode executeUpdate pour Query. Comment faire pour exécuter cette requête que j'ai créé ci-dessus pour redémarrer une séquence?

Répondre

2

Certaines des méthodes que vous voyez dans Query réellement exécuter la requête, par exemple Query.getResultList:

getResultList()

Exécuter une requête SELECT et retourner les résultats de la requête comme typées Liste.

List<Object[]> results = q.getResultList(); 

MISE À JOUR: dans votre cas, la requête finit par être un ALTER afin que vous figured it out, la méthode appropriée sera executeUpdate() qui retourne aucune liste ou de la valeur, mais le nombre de lignes affectées.

int executeUpdate()

Execute une mise à jour ou de suppression.

int altered = q.executeUpdate(); 
+0

Oui, mais dans ce cas, il jette une exception: com.microsoft.sqlserver.jdbc.SQLServerException: La déclaration n'a pas retourné un jeu de résultats. –

+0

Pourriez-vous essayer 'getSingleResult()' à la place? – Berger

+1

Cela n'a pas fonctionné non plus. q.executeUpdate(); travaillé :) –