Comment appeler une procédure stockée en veille prolongée?
J'ai une procédure stockée dans la base de données Oracle.
GET_VENDOR_STATUS_COUNT(DOCUMENT_ID IN NUMBER, NOT_INVITED OUT NUMBER, INVITE_WITHDRAWN OUT NUMBER, ...
Les autres paramètres sont des paramètres.
Dans mon hbm fichier que j'ai écrit ce qui suit:
<sql-query name="getVendorStatus" callable="true">
<return-scalar column="NOT_INVITED" type="string"/>
<return-scalar column="INVITE_WITHDRAWN" type="string"/>
<return-scalar column="INVITED" type="string"/>
<return-scalar column="DISQUALIFIED" type="string"/>
<return-scalar column="RESPONSE_AWAITED" type="string"/>
<return-scalar column="RESPONSE_IN_PROGRESS" type="string"/>
<return-scalar column="RESPONSE_RECEIVED" type="string"/>
{ call GET_VENDOR_STATUS_COUNT(:DOCUMENT_ID , :NOT_INVITED ,:INVITE_WITHDRAWN ,:INVITED ,:DISQUALIFIED ,:RESPONSE_AWAITED ,:RESPONSE_IN_PROGRESS ,:RESPONSE_RECEIVED ) }
</sql-query>
Et voici mon code Java:
session.getNamedQuery("getVendorStatus").setParameter("DOCUMENT_ID", "DOCUMENT_ID").setParameter("NOT_INVITED", "NOT_INVITED")
... continuer jusqu'à ce que tous les paramètres.
Je suis le SQL suivant exception:
18:29:33,056 WARN [JDBCExceptionReporter] Erreur SQL: 1006, SQLState:
72000
18:29:33,056 ERREUR [JDBCExceptionReporter] ORA-01006: bind
la variable n'existe pas
S'il vous plaît laissez-moi savoir quelle est la procédure exacte de l'appel d'une procédure stockée en veille prolongée? Je ne veux pas utiliser JDBC appelable déclaration.
- Reportez-vous à leur doc officielle sur l'utilisation de procédures stockées et les limites ici
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez (INOUT/paramètre de SORTIE de manutention) n'est pas pris en charge dans la section 4.1. À travers 4.1 Hibernate appelable déclaration de soutien se concentre sur le jeu de résultats renvoie. Il ya un soutien pour ce que vous essayez déjà en place en amont maître et fera partie de la prochaine version majeure de mise en veille prolongée (qui sera 4.2 ou 5.0); là, les appels de fonctions/procédures est désormais une première classe de l'opération.
Pour l'instant, vous devez utiliser JDBC directement ou construire Hibernate du maître et de l'utiliser de nouveaux soutiens. Si vous optez pour le plus tard, il ressemblerait à:
Que le code est encore jeune et va probablement changer. Par exemple, pendant que j'écris ces exemples le plus souvent je pense que
registerStoredProcedureParameter
devrait être renommé commeregisterParameter
oudeclareParameter
et qu'il doit retourner un tapé la représentation de la déclaration ou de l'enregistrement; quelque chose comme:qui permettrait ensuite:
Comme un bonus supplémentaire, les gens qui essaient ce début de l'obtenir pour aider à façonner à quoi ça ressemble avant d'être libéré (à quel point il est beaucoup plus difficile à changer).
Avec mise en veille prolongée, vous devez appliquer à la suite de la classe de transformer le PS, résultats, ainsi que les noms de colonnes que le retour à être un alias pour le bon de retour des champs dans vos résultats à la classe. Hibernate veut SQLServer stockées envisageable d'avoir un seul résultat de retour et il veut savoir de quel type d'Objet à créer. Où je travaille, nous avons l'habitude de retourner une seule ligne à la suite de deux colonnes: return_code et le message.
Par exemple...
return_code = 404, message = "Page non trouvée"
return_code = 200, message = "OK"
La classe est mappé comme n'importe quelle autre POJO, juste être sûr de faire Serializeable. Par exemple:
J'ai aussi semblent rappeler quelques hokeyness à l'égard de la convention de nommage Hibernate utilise. Je pense que names_with_underscores sont convertis en camelCaseFieldNames par exemple.