JPA вставляет и страшный ORA-01400: не может вставить NULL в исключение имени таблицы - PullRequest
2 голосов
/ 13 октября 2011

Я столкнулся с интересной игрой о печально известной вставке пустых полей из сущности в базу данных.

Скажите, у меня есть следующая таблица

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?

1 Ответ

1 голос
/ 14 октября 2011

@ axtavt было правильно ... схемы были другими. Яйцо на лице, что я не начал устранять неисправности у источника!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...