-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: index field is not inserted when inserting a list
PostPosted: Sat Jan 22, 2005 11:27 am 
Senior
Senior

Joined: Sat Nov 27, 2004 4:13 am
Posts: 137
Well I'm using SpringFramework for managing transaction, and creating SessionFactory and many other things like this,

I've already followed the rules, and couldn't find the reason of my problem.

I've got two classes: Order and OrderItem with a bidirectional many-to-one relation. (you can see the mapping files below),

the problem is when storing an Order the index property of items list is not inserted, but it should.

If I make the property not-null in my database, an exception occures during insertion of the Order, otherwise there will be an exception when querying database.



Hibernate version: 2.7.1c

Mapping documents:
Code:
<?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>
  <!-- com.tss.bourse.tfp.model.Order root -->
  <!-- prefix: ord -->
  <class name="com.tss.bourse.tfp.model.Order" table="tb_order">
    <id name="id" type="long" column="ord_id">
      <generator class="native"/>
    </id>
    <property name="sell" column="ord_is_sell" type="boolean" not-null="true"/>
    <property name="date" column="ord_date" type="string" length="10"/>
    <many-to-one name="person" column="ord_prs_ref" class="com.tss.bourse.tfp.model.Person" foreign-key="FK_ORD_PRS" not-null="true"/>
    <list name="items" cascade="all-delete-orphan" outer-join="true" inverse="true">
      <key column="ori_ord_ref" foreign-key="FK_ORI_ORD"/>
      <index column="ori_index"/>
      <one-to-many class="com.tss.bourse.tfp.model.OrderItem"/>
    </list>
    <!-- prefix: msg -->
    <map name="messages" cascade="all-delete-orphan" table="tb_order_message">
      <key column="msg_ord_ref" foreign-key="FK_MSG_ORD"/>
      <index column="msg_key" length="50" type="string"/>
      <element type="string" column="msg_text" not-null="true" length="50"/>
    </map>
  </class>
</hibernate-mapping>

------------------------------
Code:
<?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>
  <!-- com.tss.bourse.tfp.model.OrderItem root -->
  <!-- prefix: oit -->
  <class name="com.tss.bourse.tfp.model.OrderItem" table="tb_order_item">
    <id name="id" type="long" column="oit_id">
      <generator class="native"/>
    </id>
    <many-to-one name="order" column="ori_ord_ref" class="com.tss.bourse.tfp.model.Order" foreign-key="FK_ORI_ORD" not-null="true" outer-join="true"/>
    <property name="share" column="oit_is_share" not-null="true"/>
    <many-to-one name="company" column="oit_cmp_ref" class="com.tss.bourse.tfp.model.Company" foreign-key="FK_OIT_CMP" not-null="true" outer-join="true"/>
    <property name="count" column="oit_count" type="int" not-null="true"/>
    <property name="extremePrice" column="oit_extreme_price" type="string" length="50" not-null="true"/>
    <property name="investment" column="oit_investment" type="string" length="50"/>
  </class>
</hibernate-mapping>


----------------------------------------

this is stacktrace when querying data inserted with index property with value of null:
Code:
Exception occurred during event dispatching:
org.springframework.orm.hibernate.HibernateSystemException: null index column for collection: com.tss.bourse.tfp.model.Order.items; nested exception is net.sf.hibernate.HibernateException: null index column for collection: com.tss.bourse.tfp.model.Order.items
net.sf.hibernate.HibernateException: null index column for collection: com.tss.bourse.tfp.model.Order.items
   at net.sf.hibernate.collection.AbstractCollectionPersister.readIndex(AbstractCollectionPersister.java:370)
   at net.sf.hibernate.collection.List.readFrom(List.java:308)
   at net.sf.hibernate.loader.Loader.readCollectionElement(Loader.java:380)
   at net.sf.hibernate.loader.Loader.getRowFromResultSet(Loader.java:235)
   at net.sf.hibernate.loader.Loader.doQuery(Loader.java:281)
   at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
   at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:911)
   at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:931)
   at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:59)
   at net.sf.hibernate.loader.EntityLoader.load(EntityLoader.java:51)
   at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:415)
   at net.sf.hibernate.impl.SessionImpl.doLoad(SessionImpl.java:2130)
   at net.sf.hibernate.impl.SessionImpl.doLoadByClass(SessionImpl.java:2000)
   at net.sf.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1962)
   at net.sf.hibernate.type.ManyToOneType.resolveIdentifier(ManyToOneType.java:69)
   at net.sf.hibernate.type.EntityType.resolveIdentifier(EntityType.java:204)
   at net.sf.hibernate.impl.SessionImpl.initializeEntity(SessionImpl.java:2218)
   at net.sf.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:315)
   at net.sf.hibernate.loader.Loader.doQuery(Loader.java:305)
   at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
   at net.sf.hibernate.loader.Loader.doList(Loader.java:1033)
   at net.sf.hibernate.loader.Loader.list(Loader.java:1024)
   at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
   at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1553)
   at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
   at com.tss.bourse.tfp.report.dao.ReportDaoImpl$1.doInHibernate(ReportDaoImpl.java:56)
   at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:243)
   at org.springframework.orm.hibernate.HibernateTemplate.executeFind(HibernateTemplate.java:263)
   at com.tss.bourse.tfp.report.dao.ReportDaoImpl.getReport(ReportDaoImpl.java:21)
   at com.tss.bourse.tfp.gui.delegate.ReportAgent.getReports(ReportAgent.java:35)
   at com.tss.bourse.tfp.gui.view.SearchDialog.btnSearchActionPerformed(SearchDialog.java:329)
   at com.tss.bourse.tfp.gui.view.SearchDialog.access$100(SearchDialog.java:30)
   at com.tss.bourse.tfp.gui.view.SearchDialog$2.actionPerformed(SearchDialog.java:174)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
   at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
   at java.awt.Component.processMouseEvent(Component.java:5100)
   at java.awt.Component.processEvent(Component.java:4897)
   at java.awt.Container.processEvent(Container.java:1569)
   at java.awt.Component.dispatchEventImpl(Component.java:3615)
   at java.awt.Container.dispatchEventImpl(Container.java:1627)
   at java.awt.Component.dispatchEvent(Component.java:3477)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
   at java.awt.Container.dispatchEventImpl(Container.java:1613)
   at java.awt.Window.dispatchEventImpl(Window.java:1606)
   at java.awt.Component.dispatchEvent(Component.java:3477)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
   at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:141)
   at java.awt.Dialog$1.run(Dialog.java:540)
   at java.awt.Dialog.show(Dialog.java:561)
   at java.awt.Component.show(Component.java:1133)
   at java.awt.Component.setVisible(Component.java:1088)
   at com.tss.bourse.tfp.gui.view.SearchDialog.<init>(SearchDialog.java:75)
   at com.tss.bourse.tfp.gui.utils.SearchAction.actionPerformed(ToolBarBuilder.java:87)
                ... 24 more


and this is the stacktrace when making field in database not null during insert action:
Code:
Caused by: org.springframework.dao.DataIntegrityViolationException: (Hibernate operation): data integrity violated by SQL ''; nested exception is java.sql.SQLException: Try to insert null into a non-nullable column: column: ORI_INDEX table: TB_ORDER_ITEM in statement [insert into tb_order_item (ori_ord_ref, oit_is_share, oit_cmp_ref, oit_count, oit_extreme_price, oit_investment, oit_id) values (?, ?, ?, ?, ?, ?, null)]
   at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:88)
   at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:281)
   at org.springframework.orm.hibernate.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:249)
   at org.springframework.orm.hibernate.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:231)
   at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:248)
   at org.springframework.orm.hibernate.HibernateTemplate.save(HibernateTemplate.java:383)
   at com.tss.utils.crud.impl.ModifiableDaoImpl.save(ModifiableDaoImpl.java:15)
   at com.tss.utils.crud.impl.ModifiableDaoServiceImpl.save(ModifiableDaoServiceImpl.java:14)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:324)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:296)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:56)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
   at $Proxy1.save(Unknown Source)
   at com.tss.utils.crud.impl.CachingModifiableDaoServiceImpl.save(CachingModifiableDaoServiceImpl.java:89)
   at com.tss.bourse.tfp.gui.delegate.ApplicationAgent.saveOrder(ApplicationAgent.java:162)
   ... 26 more
Caused by: java.sql.SQLException: Try to insert null into a non-nullable column: column: ORI_INDEX table: TB_ORDER_ITEM in statement [insert into tb_order_item (ori_ord_ref, oit_is_share, oit_cmp_ref, oit_count, oit_extreme_price, oit_investment, oit_id) values (?, ?, ?, ?, ?, ?, null)]
   at org.hsqldb.jdbc.jdbcUtil.throwError(Unknown Source)
   at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source)
   at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101)
   at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:520)
   at net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:428)
   at net.sf.hibernate.impl.ScheduledIdentityInsertion.execute(ScheduledIdentityInsertion.java:29)
   at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:941)
   at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:866)
   at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:784)
   at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:747)
   at net.sf.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:1397)
   at net.sf.hibernate.engine.Cascades$4.cascade(Cascades.java:114)
   at net.sf.hibernate.engine.Cascades.cascade(Cascades.java:436)
   at net.sf.hibernate.engine.Cascades.cascadeCollection(Cascades.java:526)
   at net.sf.hibernate.engine.Cascades.cascade(Cascades.java:452)
   at net.sf.hibernate.engine.Cascades.cascade(Cascades.java:503)
   at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:961)
   at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:866)
   at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:784)
   at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:747)
   at org.springframework.orm.hibernate.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:386)
   at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:243)
   ... 42 more



Name and version of the database you are using: hsqldb 1.7.3

The generated SQL (show_sql=true):
if errors occure with nullable field during select operation:
Code:
Hibernate: select person2_.prs_id as prs_id0_, orderitem0_.oit_id as oit_id1_, person2_.prs_name as prs_name0_, person2_.prs_last_name as prs_last3_0_, person2_.prs_father_name as prs_fath4_0_, person2_.prs_bc_id as prs_bc_id0_, person2_.prs_birth_year as prs_birt6_0_, person2_.prs_bc_issuance_place as prs_bc_i7_0_, person2_.prs_ssn as prs_ssn0_, person2_.prs_phone as prs_phone0_, person2_.prs_post_code as prs_pos10_0_, person2_.prs_address as prs_add11_0_, person2_.prs_bourse_code as prs_bou12_0_, orderitem0_.ori_ord_ref as ori_ord_2_1_, orderitem0_.oit_is_share as oit_is_s3_1_, orderitem0_.oit_cmp_ref as oit_cmp_4_1_, orderitem0_.oit_count as oit_count1_, orderitem0_.oit_extreme_price as oit_extr6_1_, orderitem0_.oit_investment as oit_inve7_1_, person2_.prs_id as x0_0_, orderitem0_.oit_id as x1_0_, order1_.ord_date as x2_0_, order1_.ord_is_sell as x3_0_ from tb_order_item orderitem0_, tb_order order1_, tb_person person2_ where orderitem0_.ori_ord_ref=order1_.ord_id and orderitem0_.ori_ord_ref=order1_.ord_id and order1_.ord_prs_ref=person2_.prs_id and (((1=1 ))and((order1_.ord_prs_ref=?  and orderitem0_.ori_ord_ref=order1_.ord_id))and((orderitem0_.oit_is_share=? ))) order by  order1_.ord_id , orderitem0_.oit_id , order1_.ord_date , order1_.ord_prs_ref
Hibernate: select order0_.ord_id as ord_id3_, order0_.ord_is_sell as ord_is_s2_3_, order0_.ord_date as ord_date3_, order0_.ord_prs_ref as ord_prs_4_3_, person1_.prs_id as prs_id0_, person1_.prs_name as prs_name0_, person1_.prs_last_name as prs_last3_0_, person1_.prs_father_name as prs_fath4_0_, person1_.prs_bc_id as prs_bc_id0_, person1_.prs_birth_year as prs_birt6_0_, person1_.prs_bc_issuance_place as prs_bc_i7_0_, person1_.prs_ssn as prs_ssn0_, person1_.prs_phone as prs_phone0_, person1_.prs_post_code as prs_pos10_0_, person1_.prs_address as prs_add11_0_, person1_.prs_bourse_code as prs_bou12_0_, items2_.ori_ord_ref as ori_ord_2___, items2_.oit_id as oit_id__, items2_.ori_index as ori_index__, items2_.oit_id as oit_id1_, items2_.ori_ord_ref as ori_ord_2_1_, items2_.oit_is_share as oit_is_s3_1_, items2_.oit_cmp_ref as oit_cmp_4_1_, items2_.oit_count as oit_count1_, items2_.oit_extreme_price as oit_extr6_1_, items2_.oit_investment as oit_inve7_1_, company3_.cmp_id as cmp_id2_, company3_.cmp_symbol as cmp_symbol2_, company3_.cmp_name as cmp_name2_ from tb_order order0_ left outer join tb_person person1_ on order0_.ord_prs_ref=person1_.prs_id left outer join tb_order_item items2_ on order0_.ord_id=items2_.ori_ord_ref left outer join tb_company company3_ on items2_.oit_cmp_ref=company3_.cmp_id where order0_.ord_id=?


if error occures during insertion opertion with index field being not null:
Code:
Hibernate: insert into tb_order (ord_is_sell, ord_date, ord_prs_ref, ord_id) values (?, ?, ?, null)
Hibernate: call identity()
Hibernate: insert into tb_order_item (ori_ord_ref, oit_is_share, oit_cmp_ref, oit_count, oit_extreme_price, oit_investment, oit_id) values (?, ?, ?, ?, ?, ?, null)

[/code]

_________________
don't forget to credit!

Amir Pashazadeh
Payeshgaran MT
پايشگران مديريت طرح
http://www.payeshgaran.co
http://www.payeshgaran.org
http://www.payeshgaran.net


Top
 Profile  
 
 Post subject:
PostPosted: Sat Jan 22, 2005 11:33 am 
Hibernate Team
Hibernate Team

Joined: Tue Sep 09, 2003 2:10 pm
Posts: 3246
Location: Passau, Germany
http://www.hibernate.org/193.html


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jan 30, 2005 5:38 pm 
Regular
Regular

Joined: Fri Aug 29, 2003 12:48 pm
Posts: 63
You want to know something crazy? This mapping style works for me using Oracle9Dialect, but not using MysqlDialect. I swear. It worked on Friday when I left work (and my Oracle database), but it does not work today at home against MySQL. I'm going to switch to using relationship tables for safety and portability, but I just wanted to toss this datum out there.

Any clue what might be going on here? Am I on crack?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 03, 2005 6:24 am 
Beginner
Beginner

Joined: Tue Dec 21, 2004 3:18 am
Posts: 32
Hi,
I have a problem that is somehow like yours.
The values inserted in the my index column are all zeros.
Do u have any idea how could i solve this problem.
Thanks in Advance.
Sherihan.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.