2012-11-06 15 views
6

का उपयोग कर एकाधिक इन और आउट पैरामीटर के साथ संग्रहीत प्रक्रिया को कॉल करने के लिए कैसे करें एप्लिकेशन से संग्रहित प्रक्रिया को कॉल करते समय हमें एक समस्या का सामना करना पड़ रहा है। डेटाबेस oracle 10g इस प्रो में 2 इनपुट पैरामीटर और 2 आउटपुट पैरामीटर हैं।इकाई प्रबंधक

इनपुट 1: - डीबी सूची इनपुट 2: - स्ट्रिंग

आउटपुट 1: एक डीबी सूची -Again आउटपुट 2: - संख्या

जब हम

Query q = session.createSQLQuery("{call proc_name(?,?,?,?)}"); 
उपयोग करने के लिए कोशिश कर रहे हैं

हम in पैरामीटर और out पैरामीटर के बीच अंतर नहीं कर सकते हैं। तो इसका उपयोग करके हम इसे कैसे संभालेंगे।

इसके अलावा, हम प्रतिदेय कथन का उपयोग करने के लिए इस प्रकार की कोशिश की:

Session session = (Session) getEntityManager().getDelegate(); 
SessionImpl sessionImpl = ((SessionImpl) getEntityManager().getDelegate()); 
Connection cc = sessionImpl.connection(); 
CallableStatement callableStatement = null; 

callableStatement = cc.prepareCall("{call proc_name(?,?,?,?)}"); 
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("DB_LIST",callableStatement.getConnection()); 
ARRAY paramArray = new ARRAY(descriptor, callableStatement.getConnection(), array); 
callableStatement.setArray(1, paramArray); 
callableStatement.setString(2, "N"); 
callableStatement.registerOutParameter(3, OracleTypes.ARRAY, "DB_RETURN_LIST"); 
callableStatement.registerOutParameter(4, Types.INTEGER); 
// executing the query 
callableStatement.execute(); 

हम निम्नलिखित त्रुटि मिलती है:

javax.ejb.EJBException: java.lang.ClassCastException: 
$Proxy50 cannot be cast to oracle.jdbc.OracleConnection 

आप कुछ सुझाव प्रदान करें कर सकते हैं।

इस इकाई प्रबंधक है कि हम

public abstract class GenericDAO<T, ID extends Serializable> implements IGenericDAO<T, ID> { 
private final Class<T> persistentClass; 
@PersistenceContext(unitName = "firstPersistenceUnit") 
@Produces 
private EntityManager entityManager; 

public void setEntityManager(final EntityManager entityManager) throws DataAccessException { 
this.entityManager = entityManager; 
} 

public EntityManager getEntityManager() throws DataAccessException { 
return entityManager; 
} 
} 

यहाँ का उपयोग कर रहे है Persistance.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
<persistence-unit name="firstPersistenceUnit"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<jta-data-source>java:jboss/firstDataSource</jta-data-source> 
<class>com.domain.Branch</class> 
<exclude-unlisted-classes>true</exclude-unlisted-classes> 
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
<validation-mode>AUTO</validation-mode> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> 
     <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
    </properties> 
</persistence-unit> 

<persistence-unit name="secondPersistenceUnit"> 
<provider>org.hibernate.ejb.HibernatePersistence</provider> 
<jta-data-source>java:jboss/secondDataSource</jta-data-source> 
<class>com.domain.PocJeeCounty</class> 
<exclude-unlisted-classes>true</exclude-unlisted-classes> 
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
<validation-mode>AUTO</validation-mode> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" /> 
     <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
    </properties> 
</persistence-unit> 
</persistence> 
+0

मुझे लगता है कि समस्या संग्रहीत प्रक्रिया के साथ नहीं है के लिए कोड है, यू अपनी पूरी कोड पेस्ट अपने इकाई Manager.Can के साथ है। –

+0

हाय @ साजनचंद्रन मैंने इकाई प्रबंधक के साथ-साथ persistance.xml के लिए कोड जोड़ा है जिसे हम –

+0

का उपयोग कर रहे हैं हमने अनचाप के साथ-साथ session.doWork का उपयोग करके इसे आजमाया। लेकिन यह अभी भी हमें त्रुटि दे रहा है: - java.lang.Exception: javax.ejb.EJBException: java.lang.ClassCastException: $ Proxy66 को oracle.jdbc.OracleConnection में नहीं डाला जा सकता है। [/ Code] यह विशेष रूप से तब होता है जब हम ऐरे डिस्क्रिप्टर के लिए कनेक्शन प्राप्त करने का प्रयास करें। ऐरेडिस्क्रिप्टर वर्णनकर्ता = ArrayDescriptor.createDescriptor (DB_LIST ", callableStatement.getConnection()); –

उत्तर

2

न में प्रविष्टि है बनाते हैं, तो दूसरे तरीके से उपयोग के बजाय और का उपयोग कर क्वेरी और क्वेरी पैरामीटर को परिभाषित @NamedStoredProcedureQuery और @StoredProcedure पैरामीटर। बाद आपकी आवश्यकता

@NamedStoredProcedureQuery( 
    name="PROC_NAME", 
    procedureName="proc_name", 
    returnsResultSet=true/false, 
    parameters={ 
     @StoredProcedureParameter(queryParameter="param1",name="p1",direction=Direction.IN,type=Integer.class), 
     @StoredProcedureParameter(queryParameter="param2",name="p2",direction=Direction.IN,type=Timestamp.class), 
     @StoredProcedureParameter(queryParameter="param3",name="p3",direction=Direction.OUT,type=String.class), 
     @StoredProcedureParameter(queryParameter="param4",name="p4",direction=Direction.OUT,type=Integer.class) 
    } 
    ) 

और em.createNativeQuery का उपयोग() विधि

संबंधित मुद्दे