私は単純なことをしようとしています:オブジェクト型パラメータを持つストアドプロシージャを呼び出します。JPA + StoredProcedureCall +オブジェクト型INパラメータ
これは私がDBに持っているものです。
create or replace
TYPE TEST_TYPE AS OBJECT
(
test_field varchar(100)
)
と
CREATE OR REPLACE PROCEDURE TEST_PROC
(
PARAM1 IN TEST_TYPE
) AS
BEGIN
END TEST_PROC;
これは私が私のJavaコードで持っているものです。
@Embeddable
@Struct(name = "TEST_TYPE", fields = {"TEST_FIELD"})
public class TestStruct
{
private String testField;
public String getTestField() {
return testField;
}
public void setTestField(String testField) {
this.testField = testField;
}
}
と
@PostConstruct
public void init()
{
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("TEST_PROC");
call.addNamedArgument("PARAM1", "PARAM1", Types.STRUCT, "TEST_TYPE", TestStruct.class);
DataReadQuery dataReadQuery = new DataReadQuery(call);
dataReadQuery.addArgument("PARAM1");
TestStruct testStruct = new TestStruct();
List args = new ArrayList();
args.add(testStruct);
Object result = ((EntityManagerImpl)em.getDelegate()).getSession().executeQuery(dataReadQuery,args);
}
これは、私は、実行時に得るものです:
Internal Exception: java.sql.SQLException: Invalid column type
Error Code: 17004
Call: BEGIN TEST_PROC(PARAM1=>?); END;
bind => [1 parameter bound]
Query: DataReadQuery()
私は完全にJPA
での使用の構造体の主題を理解していないと思いますが、私を助けて善良な人々:)で何
ください。これを動作させる最短の方法は?
これは完全な状況です - 私はちょうどのEclipseLink JPA2.0の実装に共通の問題を解決する方法をテストしています。 BTA AFAIK SpringはJPAを実装していません - 間違っていますか? – czajah
あなたは正しいと言いますが、SpringはJPAを実装していません。私はEclipseLinkを使用しません。私の解決策はjpaの実装から独立しています、それは春のフレームワークによって提供され、正しく動作します。 EclipseLinkのみを使用する場合は、そのドキュメントを読む必要があります。 – MJM