Eclipselink:JPA< DELETE FROM语句包括与CLOB的比较

时间:2017-10-30 08:56:06

标签: java jpa eclipselink

我班上有一个元素集合:

public class InstancePdo implements Comparable<InstancePdo> {

  @Id
  @Column(name = COLUMN_NAME_ID, columnDefinition = "UUID")
  private UUID id;

  @Id
  @Column(name = COLUMN_NAME_VERSION, columnDefinition = "int")
  private int version = -1;

  @ElementCollection(fetch = FetchType.LAZY)
  @CollectionTable(name = "settings", joinColumns = {
      @JoinColumn(name = COLUMN_NAME_ID, referencedColumnName = COLUMN_NAME_ID, nullable = false, updatable = true),
      @JoinColumn(name = "COLUMN_NAME_VERSION", referencedColumnName = COLUMN_NAME_VERSION, nullable = false, updatable = true) })
  private Set<SettingPdo> settings;
}

现在,设置如下:

@Embeddable
@Table(
    name = "settings",
    uniqueConstraints = @UniqueConstraint(
        columnNames = { "id", "version", "key", "type" }))
public class SettingPdo implements Comparable<SettingPdo> {

  @Column(name = "type", nullable = false)
  private String type;

  @Column(name = "key", nullable = false)
  private String key;


  @Column(name = "value", columnDefinition = "CLOB NOT NULL", )
  @Lob
  @Convert(converter = JsonNodeStringConverter.class)
  private String value;
}

现在,如果我用一个Merge操作替换一个instancePDO,就会生成一个删除语句,如下所示:

Error Code: 932
Call: DELETE FROM settings WHERE ((((((key = ?)) AND (type = ?)) AND (value = ?)) AND (id = ?)) AND (version = ?))
        bind => [4 parameters bound]

现在,问题是Oracle不接受CLOB(或任何其他LOB)列上的WHERE子句。我把所有类似的线程都读取了所有堆栈溢出,如下所示:https://stackoverflow.com/a/33833399/1549977

  

如果使用Set并使元素Column不为null,则   hibernate将使用join列和元素创建主键   列。

如您所见,Eclipselink仍会生成包含CLOB字段比较的删除语句。

等于的Hashcode也是正确的。

我不知道下一步该做什么。我的课程(或数据库)有什么问题?由于我遇到了Oracle,如何强制JPA不在delete语句中包含某些特定的列?

提前致谢!

0 个答案:

没有答案