Я столкнулся с интересной игрой о печально известной вставке пустых полей из сущности в базу данных.
Скажите, у меня есть следующая таблица
ID | Номер (10) | Not Null
Some_Number | Номер (25) | Nullable
Some_Date | ДАТА По умолчанию (sysDate) | Nullable
У меня есть следующая сущность
@Entity
@Table(name="SOME_TABLE")
public class MockEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="ID", nullable=false)
private Long myId;
@Column(name="SOME_NUMBER")
private Long someNumber;
@Column(name="SOME_DATE")
private Date someDate;
//Basic getters and setters here
}
Uint Perssitence в моем файле persistence.xml выглядит следующим образом
<persistence-unit name="someSortOfPU" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="show_sql" value="true"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="javax.persistence.jdbc.url" value="someUrl"/>
<property name="javax.persistence.jdbc.user" value="someUser"/>
<property name="javax.persistence.jdbc.password" value="somePassword"/>
</properties>
</persistence-unit>
В тестовом примере сохраняется объект MockEntity с идентификатором и датой, не установлен SomeNumber
MockEntity testEntity = new MockEntity();
testEntity.setMyId(999999l);
testEntity.setSomeDate(new Date());
Когда я использую ojdbc14.jar с базой данных Oracle 10g, мой junit получает следующую ошибку
Причина: java.sql.BatchUpdateException: ORA-01400: невозможно вставить NULL в ("SOME_TABLE". "SOME_NUMBER")
Когда я использую ojdbc14.jar с базой данных Oracle 11g, мой junit завершается успешно. Строка существует в таблице.
Я пытался использовать ojbc5.jars в надежде, что эта проблема исчезнет, но безуспешно.
Oracle 10g интерпретирует сгенерированный Hibernate sql:
insert into SOME_TABLE (ID, SOME_NUMBER, SOME_DATE) values (?, ?, ?)
где в параметре, переданном в оператор, отличное от 11g, есть ноль, и как я могу получить ожидаемые результаты для 10g?