powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
13 сообщений из 13, страница 1 из 1
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850316
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос:
возникает след ошибка см ниже:
данные :
- hibernate + eclipse
- oracle 11g
- текст кода приведен также ниже
- я где то читал что hibernate не поддерживает oracle 11g или надо менять драйвер, или что-то там с 32 -64 версиями java. все перепробовал и на 32 и на 64 не работает - такая же ошибка.
как лечить ?

3362 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1400, SQLState: 23000
3362 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01400: невозможно вставить NULL в ("HIBER"."LOCATIONS"."EVENT_ID")

3362 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1400, SQLState: 23000
3362 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01400: невозможно вставить NULL в ("HIBER"."LOCATIONS"."EVENT_ID")

3362 [main] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update


код:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.hibernate.Session;

public class Main {
private static Iterator i3;

public static void main(String[] args) throws Exception {
HibernateUtil hibernateUtil = new HibernateUtil();



Session session = hibernateUtil.getSession();

//----------------

Location l = new Location();

Set<Event> set_event = new HashSet<Event>();
Event ev_temp = new Event();
ev_temp.setLocation(l);
// ev_temp.setId(new Integer(100));

set_event.add(ev_temp);
//l.setName("building 1");
l.setEvents(set_event);

session.beginTransaction();

session.save(l);

session.getTransaction().commit();
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850317
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class name="Event" table="events">
<id name="id" column="id" type="int" >
<generator class="sequence">
<param name="sequence">SEQ1</param>
</generator>
</id>
<property name="name" type="string" length="100"/>
<property name="startDate" column="start_date"
type="date"/>
<property name="duration" type="integer"/>
<many-to-one name="location"
column ="location_id"
not-null="true"
class="Location" cascade="all"/>
<set name="speakers" cascade="all" inverse="true">
<key column ="event_id"/>
<one-to-many class="Speaker"/>
</set>
<set name="attendees" cascade="all" inverse="true">
<key column ="event_id"/>
<one-to-many class="Attendee"/>
</set>
</class>
</hibernate-mapping>
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850319
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
" http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
<class name="Location" table="locations">

<id name="id" column="id" type="int" >
<generator class="sequence" >
<param name="sequence">SEQ1</param>
</generator>
</id>


<property name="name" type="string"/>
<property name="address" type="string"/>

<set name="events" cascade="all" inverse="true" >
<key> <column name="event_id"/> </key>
<one-to-many class="Event" />
</set>

</class>
</hibernate-mapping>
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850322
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
import java.util.Date;
import java.util.Set;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;

import java.io.Serializable;

@Entity
public class Event implements Serializable{

@Id
@Column(name = "id")
@SequenceGenerator(name = "id", allocationSize = 1, initialValue = 1, sequenceName = "SEQ1")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id")
private Integer id;

@Column(name = "name")
private String name;
private Date startDate;
private int duration;
private Set<Speaker> speakers;
private Set<Attendee> attendees;

@ManyToOne
@JoinColumn(name = "event_id")
private Location location;



public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Date getStartDate() {
return startDate;
}

public void setStartDate(Date startDate) {
this.startDate = startDate;
}

public int getDuration() {
return duration;
}

public void setDuration(int duration) {
this.duration = duration;
}

public Location getLocation() {
return location;
}

public void setLocation(Location location) {
this.location = location;
}

public Set getSpeakers() {
return speakers;
}

public Set<Attendee> getAttendees() {
return attendees;
}

public void setSpeakers(Set<Speaker> speakers) {
this.speakers = speakers;
}

public void setAttendees(Set<Attendee> attendees) {
this.attendees = attendees;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}



}
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850323
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


@Entity
public class Location implements Serializable{

@Id
@Column(name = "id")
@SequenceGenerator(name = "id", allocationSize = 1, initialValue = 1, sequenceName = "SEQ1")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id")
private Integer id;

@Column(name = "name")
private String name;
private String address;


@OneToMany(mappedBy = "location", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Event> events;






public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public Set<Event> getEvents() {
return events;
}

public void setEvents(Set<Event> events) {
this.events = events;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

}
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850326
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
" http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:db1</property>
<property name="connection.username">login</property>
<property name="connection.password">password</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect"> org.hibernate.dialect.OracleDialect </property>
<!-- Enable Hibernate's current session context -->
<property name="current_session_context_class">org.hibernate.context.ManagedSessionContext</property>

<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Mapping files -->
<mapping resource="Event.hbm.xml"/>
<mapping resource="Location.hbm.xml"/>
<mapping resource="Attendee.hbm.xml"/>
<mapping resource="Speaker.hbm.xml"/>
</session-factory>
</hibernate-configuration>
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850344
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл добавить
ОС : windows 7 64 bit
eclipse и java также 64 bit INDIGO последняя версия
java пробовал 32 бита
- такая же ошибка на NetBeans 7.1 32 бит версия java

коллеги как выйти из ситуации ?
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850351
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew1445- я где то читал что hibernate не поддерживает oracle 11g или надо менять драйвер, или что-то там с 32 -64 версиями java. все перепробовал и на 32 и на 64 не работает - такая же ошибка.
как лечить ?

Я где-то что-то читал, но даже не пытался прочитать текст ошибки?

andrew14453362 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01400: невозможно вставить NULL в ("HIBER"."LOCATIONS"."EVENT_ID")

У LOCATIONS.EVENT_ID стоит Not Null Constraint. Hibernate ничего об этом не знает, поэтому пытается сохранить в locations до сохранения в event. Для того чтобы исправить, по-моему достаточно в маппинге указать, not null.

У вас ещё какие-то непонятки в структуре. Если ассоциация Location-Event имеет тип one-to-many, то откуда в таблице Locations колонка Event_ID? Таким образом Locations ссылается на единственный Event, а не на множество.

Зачем вы комбинируется xml маппинг и аннотации? Используйте что-то одно.

Постарайтесь форматировать код и использовать тэги подстветки. Вчитываться во всю эту кашу без подсветки захотят не все.
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850388
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответ :

1) попробовал поставить not null - такая же ошибка

<set name="events" cascade="all" inverse="true" >
<key> <column name="event_id" not-null = "true"/> </key>
<one-to-many class="Event" />
</set>

2) трассировал все это. интересно то что в values eclipse переменные id, которые якобы NULL
не NULL. т.е. они принимают значения полученные из oracle sequence. в моем случае id в location и events.
то что в location есть Set<Events> - он также не NULL при трассировке. в коде я его инициализирую.

3) location содержит id и event_id. как я понимаю это как раз one to many. т.е. на один location приходится много event. в свою очередь event имеет свой id - уникальный столбец.
или я прав - поясните уважаемые гуру hibernate.

4) внешнего ключа я пока не ставил. мне кажется это не имеет значения.

все проблема в том что в памяти hibernate держит не NULL, а при INSERT генерирует NULL.


---------- логи

Hibernate: select SEQ1.nextval from dual
Hibernate: select SEQ1.nextval from dual
Hibernate: insert into locations (name, address, id) values (?, ?, ?)
3208 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1400, SQLState: 23000
3209 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01400: невозможно вставить NULL в ("HIBER"."LOCATIONS"."EVENT_ID")
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850406
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы всё же для начала с таблицами и колонками разберитесь.

Location - Event - по вашей задумке one-to-many
Каждая запись location содержит в себе одно единственное значение event_id.
Соответственно одной записи location соответствует только одна запись event.
Это либо one-to-one либо many-to-one.

Когда вы разберетесь с этим недоразумением, станет понятно в чем дело. У вас даже insert ничего не пытается в event_id сохранить потому что эта колонка не понятн она что должна быть зампаплена.
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850409
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrew14454) внешнего ключа я пока не ставил. мне кажется это не имеет значения.
вам нужно убрать всё лишнее и сделать минимальный код маппинга.
Т.к. все глючи \ FK ставит сам хибер по нему.
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37850422
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настройте опцию
hibernate.hbm2ddl.auto

Automatically validates or exports schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.

e.g. validate | update | create | create-drop

чтобы хибер вам наделал таблиц. А потом модифицируете их как вам удобно.
...
Рейтинг: 0 / 0
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
    #37851347
andrew1445
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо большое ребята - помогло все что вы сказали.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]