Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用EclipseLink 2.6 JPA将param中的表对象类型传递给存储过程_Jpa_Stored Procedures_Eclipselink - Fatal编程技术网

如何使用EclipseLink 2.6 JPA将param中的表对象类型传递给存储过程

如何使用EclipseLink 2.6 JPA将param中的表对象类型传递给存储过程,jpa,stored-procedures,eclipselink,Jpa,Stored Procedures,Eclipselink,有人能帮我弄清楚如何使用EclipseLink JPA将表对象类型作为IN参数传递给存储过程吗 以下是我的存储过程: create or replace TYPE FORMS_DTLS_TYPE FORCE as OBJECT (ITEM_ID NUMBER, STUDY_ID NUMBER, ITEMTYPE VARCHAR2(50),ITEM_TITLE VARCHAR2(50)); create or replace TYPE FORMS_DTLS_COLL AS TABLE OF

有人能帮我弄清楚如何使用EclipseLink JPA将表对象类型作为IN参数传递给存储过程吗

以下是我的存储过程:

create or replace TYPE FORMS_DTLS_TYPE FORCE as OBJECT
(ITEM_ID  NUMBER, STUDY_ID NUMBER, ITEMTYPE VARCHAR2(50),ITEM_TITLE   VARCHAR2(50));
create or replace TYPE FORMS_DTLS_COLL AS TABLE OF FORMS_DTLS_TYPE;

PROCEDURE createForm(pi_form_coll IN FORMS_DTLS_COLL,
                        x_return_status OUT NOCOPY VARCHAR2)
IS
BEGIN
x_return_status := 'SUCCESS';
FOR i in pi_form_coll.FIRST..pi_form_coll.LAST
LOOP
  INSERT INTO TEST_FORMS ("ITEM_ID", "STUDY_ID", "ITEM_TYPE",  "ITEM_TITLE")
  VALUES (pi_form_coll(i).ITEM_ID,   pi_form_coll(i).STUDY_ID,pi_form_coll(i).ITEMTYPE, 'TITLE');
  COMMIT;
 END LOOP;
END createForm;
public String createTestForm0() throws ServiceException {
    Query query = em.createNamedQuery("TestForms.forms");
    TestForms forms = new TestForms();
    List<TestForms> formList = new ArrayList();                
    forms.setItemId(BigDecimal.valueOf(5));
    forms.setStudyId(BigInteger.valueOf(99));// stuId);
    forms.setItemType("New");
    forms.setItemTitle("New title");
    formList.add(forms);
    query.setParameter("pi_form_dtls", formList);                
    String result = (String)query.getSingleResult();
    return result;
}
使用@NamedPLSQLStoredProcedureQuery定义存储过程:

@Entity
@NamedPLSQLStoredProcedureQueries( {   
 @NamedPLSQLStoredProcedureQuery(name = "TestForms.forms", procedureName = "FORMS_DTLS_PKG.createForm",
            parameters = {
                @PLSQLParameter(name = "pi_form_dtls", direction = Direction.IN, databaseType = "FORMS_DTLS_COLL"),
                @PLSQLParameter(name = "x_return_status", direction = Direction.OUT, databaseType = "VARCHAR_TYPE")
            }
    )
})

@Struct(name="FORMS_DTLS_TYPE", fields={"ITEM_ID", "STUDY_ID", "ITEMTYPE", "ITEM_TITLE"})
@PLSQLTable(
   name="FORMS_DTLS_COLL",
   compatibleType="FORMS_DTLS_TYPE"
)
public class TestForms implements Serializable {
...
}
调用存储过程:

create or replace TYPE FORMS_DTLS_TYPE FORCE as OBJECT
(ITEM_ID  NUMBER, STUDY_ID NUMBER, ITEMTYPE VARCHAR2(50),ITEM_TITLE   VARCHAR2(50));
create or replace TYPE FORMS_DTLS_COLL AS TABLE OF FORMS_DTLS_TYPE;

PROCEDURE createForm(pi_form_coll IN FORMS_DTLS_COLL,
                        x_return_status OUT NOCOPY VARCHAR2)
IS
BEGIN
x_return_status := 'SUCCESS';
FOR i in pi_form_coll.FIRST..pi_form_coll.LAST
LOOP
  INSERT INTO TEST_FORMS ("ITEM_ID", "STUDY_ID", "ITEM_TYPE",  "ITEM_TITLE")
  VALUES (pi_form_coll(i).ITEM_ID,   pi_form_coll(i).STUDY_ID,pi_form_coll(i).ITEMTYPE, 'TITLE');
  COMMIT;
 END LOOP;
END createForm;
public String createTestForm0() throws ServiceException {
    Query query = em.createNamedQuery("TestForms.forms");
    TestForms forms = new TestForms();
    List<TestForms> formList = new ArrayList();                
    forms.setItemId(BigDecimal.valueOf(5));
    forms.setStudyId(BigInteger.valueOf(99));// stuId);
    forms.setItemType("New");
    forms.setItemTitle("New title");
    formList.add(forms);
    query.setParameter("pi_form_dtls", formList);                
    String result = (String)query.getSingleResult();
    return result;
}

什么是
@namedplsqlstoredprocesdurequiry
?当JPA拥有
@namedStoredProcedureRequesty
时,PLSQL注释允许我们使用复杂的PLSQL类型,如记录和表,这些类型是JDBC无法访问的。