EclipseLink / JPA持久存在大(blob)实体,性能问题

时间:2012-09-27 07:52:39

标签: jpa ejb-3.0 eclipselink

我有一个实体,其中包含一些包含一些图像的@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

1 个答案:

答案 0 :(得分:0)

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

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

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

您还可以使用自定义程序

禁用平台中的定位器使用情况
platform.setShouldUseLocatorForLOBWrite(false);