2011-09-14 52 views
2

我们将为基于Oracle数据库的大型系统编写一个新的Web界面。所有业务规则已经在PL/SQL存储过程中编码,我们希望尽可能重复使用尽可能多的代码。我们将编写一些新的存储过程,将结合现有业务规则并返回最终结果数据集。将数据从Oracle存储过程传递到Java

我们希望在数据库级别执行此操作以避免java-db往返。接口层将用Java编写(我们希望使用GWT),所以我们需要一种将数据从Oracle存储过程传递到Java服务端的方法。数据可以是例如符合特定条件的特定项目或项目列表的一组属性。 有人会推荐一个更好的方法吗?

我们正在考虑的2种以下情形之一:

  • 传递对象的对象和列表(在 架构级定义的数据库对象类型)

  • 传递sys_refcursor

我们证实了这两种方法是“可行的”,问题更多的是设计决定,最好的做法,可能的维护问题,灵活性等

我会很感激的任何提示。

回答

1

在过去,我已经取得正好与经典JDBC CallableStatement同样没有任何性能比较或维护的问题。随着ORM解决方案,如Hibernate使持久性更加灵活,可以环绕Hibernate您的解决方案在本post实现。如果您尚不熟悉存储过程和CallableStatement的工作方式,请参阅此example

+0

这个问题的答案是什么? OP已经知道如何去做;他会问问哪种方法更好。 –

+0

'@Vineet Reynolds'“有人会推荐一个更好的方法吗?” - 并且在此之前阅读场景。 – Bitmap

+0

考虑发布其他答案,推荐使用CallableStatement添加了什么值?也许你应该按照你自己的建议来阅读场景;使用对象类型和引用游标并不容易,长期来看也不可维护,并且OP正在这些领域寻求建议。 –

0

这已经有一段时间,因为我已经做了类似的东西,但我记得的方式是,你需要定义调用存储过程视图,然后你可以很容易地从Java中读出的结果集,用您选择的OR映射器。

所以,这似乎接近你的方案1,这从来没有造成任何问题在我的经验。

的一两件事一个需要小心的交易处理:如果你的存储过程写入数据,并调用其中几个的Java EE的事务中,你可能会进入数据不一致的情况。

2

我会建议用具有明确的键一个指针贴(在Java开发者和PL/SQL开发人员同意双方)。这在将来更容易扩展,如果需要,可以轻松地将refcursor转换为hashmap,然后使用apache bean utils将hashmap转换为POJO。我正在研究一个大型电信项目,并且有许多方法来解决这个问题,并且refcursor在一天结束时似乎是最好的。

+0

您能否提供一些关于如何将'refcursor'转换为'Hashmap'然后转换为'POJO'的知识?谢谢 – user75ponic

相关问题