-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: procedures stockées et mappings complexes
PostPosted: Mon Nov 21, 2005 12:15 pm 
Newbie

Joined: Mon Nov 21, 2005 11:41 am
Posts: 3
Bonjour
je travaille actuellement sur un projet hibernate 3 avec la problématique suivante:
certaines tables ne sont accessibles qu'au travers de fonctions et procédures stockées.

J'ai voulu tester mon architecture avec les tables suivantes: Country, LanguageList et CurrencyTable ou on retrouve les clef de currency et language en
clef etrangères dans la table currency

Le défit consistant à créer un mapping hibernate complet à l'aide de procédures stockées; j'ai donc implémenté les mapping suivants:


<class name="Country" >
<id name="countryCode" type="java.lang.String">
<generator class="assigned"/>
</id>

<property name="wording" type="java.lang.String" />
<property name="wording1" type="java.lang.String" />
<property name="jcbCountryCode" type="java.lang.String" />

<many-to-one name="currencyTable" class="CurrencyTable" not-null="true" />

<many-to-one name="languageList" class="LanguageList" not-null="true" />
<sql-insert callable="true">{ call insertCountry(?,?,?,?,?,?)}</sql-insert>
<sql-update callable="true">{? = call updateCountry(?,?,?,?,?,?)}</sql-update>

</class>


<class name="CurrencyTable" >
<id name="currencyCode" type="java.lang.String">
<generator class="assigned"/>
</id>
<property name="currencyName" type="java.lang.String" />
<loader query-ref="currencyload"/>
</class>


<class name="LanguageList" >
<id name="languageCode" type="java.lang.String">
<generator class="assigned"/>
</id>

<property name="languageLabel" type="java.lang.String" />
<loader query-ref="languageload"/>
</class>

les proc/stock associées sont les suivantes:


CREATE OR REPLACE FUNCTION currencyload(id IN VARCHAR2)
RETURN SYS_REFCURSOR
AS
st_cursor SYS_REFCURSOR;
BEGIN
OPEN st_cursor FOR
SELECT CURRENCY_CODE, CURRENCY_NAME FROM CURRENCY_TABLE WHERE CURRENCY_CODE=id;
RETURN st_cursor;
END;
--------
CREATE OR REPLACE FUNCTION languageload(id IN VARCHAR2)
RETURN SYS_REFCURSOR
AS
st_cursor SYS_REFCURSOR;
BEGIN
OPEN st_cursor FOR
SELECT LANGUAGE_CODE, LANGUAGE_LABEL FROM LANGUAGE_LIST WHERE LANGUAGE_CODE =id;
RETURN st_cursor;
END;
-------
CREATE OR REPLACE FUNCTION updateCountry(
country_code IN VARCHAR2,
wording IN VARCHAR2,
wording_1 IN VARCHAR2,
currency_code IN VARCHAR2,
language_code IN VARCHAR2,
jcb_country_code IN VARCHAR2)
RETURN NUMBER IS
BEGIN
UPDATE COUNTRY
SET
WORDING=wording,
WORDING_1=wording_1,
CURRENCY_CODE= currency_code,
LANGUAGE_CODE= language_code,
JCB_COUNTRY_CODE = jcb_country_code
WHERE
COUNTRY_CODE=country_code;
COMMIT;
RETURN SQL%ROWCOUNT ;
END;
-----

CREATE OR REPLACE PROCEDURE insertCountry(
country_code IN VARCHAR2,
wording IN VARCHAR2,
wording_1 IN VARCHAR2,
currency_code IN VARCHAR2,
language_code IN VARCHAR2,
jcb_country_code IN VARCHAR2)
AS
BEGIN
INSERT INTO COUNTRY VALUES(country_code, wording, wording_1, currency_code,language_code,jcb_country_code);
COMMIT;
END;

----

un formulaire au sien d'un JSP , me permet de rensigner les éléments nécessaires à la création de country.

ensuite une action struts est chargé de faire ceci:
nous chargeons dans un premier temps les objets currencyTable et Language_list correspondant aux paramètres
associés dans le formulaires

ensuite nous instancions le session.save de l'objet Country.

et la l'exception suivante se produit:

1547 [http-8080-3] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 942, SQLState: 42000
21547 [http-8080-3] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-00942: table or view does not exist

Hibernate Exceptioncould not retrieve snapshot: [com.experian.liege.hibernate.beans.CurrencyTable#EUR]
21563 [http-8080-3] WARN org.apache.struts.action.RequestProcessor - Unhandled Exception thrown: class java.lang.RuntimeException
21594 [http-8080-3] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/ligd].[action] - "Servlet.service()" pour la servlet action a généré une exception
java.lang.RuntimeException: org.hibernate.exception.SQLGrammarException: could not retrieve snapshot: [com.experian.liege.hibernate.beans.CurrencyTable#EUR]


il semblerai qu'hibernate cherche a rapatrier les objets référence (LanguageList et etCurrencyTable) avant d'effectuer la sauvegarde effective de l'objet country

nous avons alors implémenté des loaders pour ces objets sous forme de procedure stockée mais la encore pas de succès...

Merci d'avance pour votre aide.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.