|
|
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
вопрос: возникает след ошибка см ниже: данные : - 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(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:22:16 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
<?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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:22:31 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
<?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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:22:49 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
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; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:23:33 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
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; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:23:52 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
<?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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:25:16 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
забыл добавить ОС : windows 7 64 bit eclipse и java также 64 bit INDIGO последняя версия java пробовал 32 бита - такая же ошибка на NetBeans 7.1 32 бит версия java коллеги как выйти из ситуации ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:34:18 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
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 маппинг и аннотации? Используйте что-то одно. Постарайтесь форматировать код и использовать тэги подстветки. Вчитываться во всю эту кашу без подсветки захотят не все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:36:08 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
спасибо за ответ : 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") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 14:51:24 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
Вы всё же для начала с таблицами и колонками разберитесь. Location - Event - по вашей задумке one-to-many Каждая запись location содержит в себе одно единственное значение event_id. Соответственно одной записи location соответствует только одна запись event. Это либо one-to-one либо many-to-one. Когда вы разберетесь с этим недоразумением, станет понятно в чем дело. У вас даже insert ничего не пытается в event_id сохранить потому что эта колонка не понятн она что должна быть зампаплена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 15:01:34 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
andrew14454) внешнего ключа я пока не ставил. мне кажется это не имеет значения. вам нужно убрать всё лишнее и сделать минимальный код маппинга. Т.к. все глючи \ FK ставит сам хибер по нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 15:02:43 |
|
||
|
hibernate oracle 11g-> SQL Error: 1400, SQLState: 23000
|
|||
|---|---|---|---|
|
#18+
Настройте опцию 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 чтобы хибер вам наделал таблиц. А потом модифицируете их как вам удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2012, 15:08:42 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37850388&tid=2131496]: |
0ms |
get settings: |
22ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
65ms |
get topic data: |
18ms |
get forum data: |
5ms |
get page messages: |
91ms |
get tp. blocked users: |
3ms |
| others: | 352ms |
| total: | 592ms |

| 0 / 0 |
