Есть ли способ позволить hibernate генерировать SQL-запрос, используя "is null" в дополнение к привязке значения к null? Я использую DB2, я объяснил детали в следующем:
В моем проекте я использовал следующие постоянные классы для сопоставления с таблицами БД (я использовал ElementCollection для сопоставления коллекции экземпляров B в экземпляре A):
@Entity
@Table(name = "A")
public class A implement Serializable {
@Id
@Colum(name = "A_A")
private a_A;
@ElementCollection(fetch = FetchType.EAGER)
@JoinTable(name = "B", joinColumns = @JoinColumn(name = "B_A", nullable = false))
@Fetch(FetchMode.SUBSELECT)
private Set<B> A_Bs = new HashSet<B>();;
....
}
@Embeddable
@Table(name = "B")
@Access(AccessType.FIELD)
public class B implements Serializable {
@Column(name B_C)
private String C;
@Column(name B_D)
private String D;
.....
}
когда я пытаюсь обновить экземпляр сущности A, я вижу следующие sqls Hibernate, сгенерированные самим собой (поскольку в B нет определения id, в общем случае имеет смысл просто слепо обновлять коллекцию в любом случае):
delete from B where B_A=? and B_C=? and B_D=?
insert into B (B_A, B_C, B_D) values (?, ?, ?)
проблема в том, что B_C и B_D обнуляются, а B_D - это внешний ключ другой таблицы (объекта).
Таким образом, если исходное значение B_C или B_D равно нулю, sql для удаления станет следующим:
delete from B where B_A=<somevalue> and B_C=null and B_D=null
в DB2, если у вас "= null", DB2 не удаляет строки, в итоге вторая вставка в запрос завершится неудачно. но в моем приложении я должен поставить значение NULL в качестве значения для B_C или B_D, поэтому я бы хотел, чтобы hibernate генерировал запросы следующим образом:
delete from B where B_A=? and (B_C is null or B_C=?) and (B_D is null or B_D=?)
есть ли способ сделать это?
Пожалуйста, помогите. большое спасибо.