kullanarak karmaşık nesne türü parametreleriyle Oracle'da saklı yordam çağırma Oracle 12c'den beri deprecation of JPublisher nedeniyle, oluşturulan sınıflar ve JDBC yerine karmaşık nesne türleri ile karmaşık nesne türlerini saklı yordamları nasıl arayabileceğimizi başka yollardan düşünüyoruz.EclipseLink
EclipseLink JPA Extensions, bu konuda yardımcı olabilecek tek araçtır. Bulduğum örnekleri takiben, prosedürleri argüman olarak basit tiplerle çağırabilirim. Ancak, varlık sınıflarım, nesneler biraz daha karmaşık olduğunda, veritabanındaki PL/SQL Nesne türlerine doğru şekilde eşlenmelerini sağlayacak şekilde açıklama ekleyemedim.
Örneğinbiz bir giriş ve tip yapısı aşağıdaki aynı nesne türü A bir çıkış parametresi olan bir saklı yordam adres:
Nesne tipi içerir < - < tablo Tablo B tipi olan - < içeren nesne türü C - Tablo türü D, < tablosu - Nesne türü E.
Tablo türleri için @OracleObject öğelerini ve Tablo türleri için @PLSQLTable kullanacağımı düşündüm ama bulamadım Bunları birlikte doğru şekilde birleştirmenin bir yolu.
// All annotations with the required elements
@Embeddable
@Struct
@OracleObject
public class A {
@Column(name = "B")
private B b;
// Getter and setter
}
@Embeddable
@Struct
@PLSQLTable (.., nestedType = "C")
public class B { }
@Embeddable
@Struct
@OracleObject
public class C {}
Sınıf A'ya uygun açıklama elemanları ve/veya sınıf C ancak Java ve DB nesneleri eşleşmeyebileceğinden ile @PLSQLTable eklemek için denedim:
Aşağıdaki denedim birbirine doğru ve arama sırasında java.sql.SQLException: Invalid column type
alıyorum.
birisi A Nesne olduğunu EclipseLink anlatmak için ek açıklamaları nasıl kullanılacağını bana açıklayabilir eğer ben çok takdir ediyorum C.
Çok teşekkür ederim Nesne Tablo B içerir.
Sonunda JDBC kullanmaya karar verdik. [JDBC Guide] 'da açıklandığı gibi SQLData interaface'ı uygulayan tip sınıfları için basit bir jeneratör yazdım (https://docs.oracle.com/database/121/JJDBC/oraoot.htm#JJDBC28461). Daha sonra saklı yordamı çağırmak için oluşturulan sınıflarla birlikte [OracleCallableStatement] (https://docs.oracle.com/database/121/JAJDB/oracle/jdbc/OracleCallableStatement.html) kullanın. Koleksiyon türü öznitelikleri için, SQLData'yi uygulayan Java sınıfı içinde [OracleArray] (https://docs.oracle.com/database/121/JJDBC/oraarr.htm#i1056527) kullanabilirsiniz. –
Tebrikler. Kendinden tanımlı alt nesnelerle ekleyebiliyor musunuz? Örneğin, bir ebeveyn Araba ve çocuk Radyo ile. Aşağıdaki ana için readSQL yöntemini kullanıyorum: setRadio ((Radio) stream.readObject()); Çalışma zamanında derlemesine rağmen, çalışma zamanında bir döküm özel durumu atar. xception: oracle.sql.STRUCT, com.foo.beans.Radio'ya radyosunun bir Struct veya STRUCT olmasını istediği gibi gönderilemez. Dokümanlar bunu yapmak zorunda olmadığınızı söylüyor, ancak dokümanlar ana çocuk ilişkisi için tam bir örnek teşkil etmiyor gibi görünüyor. Sanırım sorun olmadan readSQL'inizde de aynısını yapıyorsunuz. – Jason
Sorunum, typeMap'in alt nesnelerle ilgili değerlere sahip olmamasıydı.Spring Data JDBC Eklentileri projesi, typeMap'i kolaylıkla veya tür haritasının alt nesnelerle ayarlanma örneklerini göstermez. – Jason