0

我有一个包含一些图像的 @Lob 字段很少的实体。当我执行以下方法时,

entityManager.persist(myEnity);

此方法产生以下查询,由于我的表很大,因此需要很长时间才能执行。

SELECT id, img_1, img_2 FROM my_entity WHERE (ID = :1) FOR UPDATE;

我不希望执行此查询,因为我只想插入一行。

仅供参考,我有以下应用程序环境。

EJB 3.0
EclipseLink 2.3.0
JDK 1.6
WebLogic 10.3
Oracle 11g
4

1 回答 1

0

Oracle 11 之前的 Oracle JDBC 驱动程序有 4k LOB 大小限制,因此写入 lob 的唯一方法是插入和清空 lob,然后选择 lob 并写入其中。这就是你所看到的。

这是可配置的,只有当您的“eclipselink.target-database”是“Oracle8i”、“Oracle9i”、“Oracle10g”时才会这样做。

对于 Oracle 11g,您应该使用“Oracle11”,该平台将不使用定位器,因为在 Oracle 11g 中不再需要它。为此,您可能需要使用最新版本 (2.4)。使用“Oracle”作为您的目标也不会使用定位器。

您还可以使用定制器禁用平台中的定位器使用,

platform.setShouldUseLocatorForLOBWrite(false);
于 2012-09-27T13:47:18.497 回答