[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-4866) Insert trying to insert values in the wrong order

Neil Stickels (JIRA) noreply at atlassian.com
Sat Jan 30 22:00:29 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4866?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=35408#action_35408 ] 

Neil Stickels commented on HHH-4866:
------------------------------------

I guess I should also add though that when it reads it in after doing the insert, it reads it the way it was inserted, so it has the brand_id and store_id flip flopped in the database table, and in the subsequent items that this creates.  This isn't the only table that this happens in.  I have other tables which link together keys from multiple tables, and the same thing happens on those.

> Insert trying to insert values in the wrong order
> -------------------------------------------------
>
>                 Key: HHH-4866
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4866
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 3.3.1
>         Environment: Using Hibernate 3.3.1 in JBoss 5.0.0, connecting to a MySQL 5.0 database
>            Reporter: Neil Stickels
>
> It appears for all of my inserts where I have multiple parameters of the same type, it will mix up the order.  
> I am pretty new to Hibernate, so possibly I have something wrong.  Here are what I think are the relevant files:
> StoreBrand.hbm.xml:
> <?xml version="1.0"?>
> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
> "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
> <!-- Generated Jan 10, 2010 12:38:41 AM by Hibernate Tools 3.2.4.GA -->
> <hibernate-mapping>
>     <class name="com.shopperapp.dao.StoreBrand" table="STORE_BRANDS" catalog="shopper_app">
>         <composite-id name="id" class="com.shopperapp.dao.StoreBrandId">
>             <key-property name="storeId" type="int">
>                 <column name="STORE_ID" />
>             </key-property>
>             <key-property name="brandId" type="int">
>                 <column name="BRAND_ID" />
>             </key-property>
>         </composite-id>
>         <many-to-one name="brand" class="com.shopperapp.dao.Brand" update="false" insert="false" fetch="select">
>             <column name="BRAND_ID" not-null="true" />
>         </many-to-one>
>         <many-to-one name="store" class="com.shopperapp.dao.Store" update="false" insert="false" fetch="select">
>             <column name="STORE_ID" not-null="true" />
>         </many-to-one>
>     </class>
> </hibernate-mapping>
> Bean calling the persistence code:
> 	StoreBrand sb = new StoreBrand(sbid, brand, store);
> 	StoreBrandHome sbHome = new StoreBrandHome();
> 	sbHome.persist(sb);
> StoreBrandHome which does the persistence:
> 	public void persist(StoreBrand transientInstance) {
> 		log.debug("persisting StoreBrand instance");
> 		try {
> 			sessionFactory.getCurrentSession().beginTransaction();
> 			System.out.println("trying to persist store_id "+transientInstance.getStore().getId()+" and brand_id "+transientInstance.getBrand().getId());
> 			sessionFactory.getCurrentSession().persist(transientInstance);
> 			sessionFactory.getCurrentSession().getTransaction().commit();
> 			log.debug("persist successful");
> 		} catch (RuntimeException re) {
> 			log.error("persist failed", re);
> 			throw re;
> 		}
> 	}
> As you can see, I have a debug statement before the insert showing the store_id and the brand_id that I am trying to persist.  When I turn on the debug, this is what I see in the server.log:
> 2010-01-30 20:34:37,194 DEBUG [org.hibernate.jdbc.ConnectionManager] (http-0.0.0.0-8080-2) opening JDBC connection
> 2010-01-30 20:34:37,195 INFO  [STDOUT] (http-0.0.0.0-8080-2) trying to persist store_id 1 and brand_id 9
> 2010-01-30 20:34:37,195 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] (http-0.0.0.0-8080-2) generated identifier: component[storeId,brandId]{brandId=1, storeId=9}, using strategy: org.hibernate.id.Assigned
> 2010-01-30 20:34:37,195 DEBUG [org.hibernate.transaction.JDBCTransaction] (http-0.0.0.0-8080-2) commit
> 2010-01-30 20:34:37,195 DEBUG [org.hibernate.pretty.Printer] (http-0.0.0.0-8080-2) listing entities:
> 2010-01-30 20:34:37,195 DEBUG [org.hibernate.pretty.Printer] (http-0.0.0.0-8080-2) com.shopperapp.dao.StoreBrand{id=component[storeId,brandId]{brandId=1, storeId=9}, store=com.shopperapp.dao.Store#1, brand=com.shopperapp.dao.Brand#9}
> 2010-01-30 20:34:37,195 DEBUG [org.hibernate.jdbc.AbstractBatcher] (http-0.0.0.0-8080-2) about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
> 2010-01-30 20:34:37,195 DEBUG [org.hibernate.SQL] (http-0.0.0.0-8080-2) insert into shopper_app.STORE_BRANDS (STORE_ID, BRAND_ID) values (?, ?)
> 2010-01-30 20:34:37,195 INFO  [STDOUT] (http-0.0.0.0-8080-2) Hibernate: insert into shopper_app.STORE_BRANDS (STORE_ID, BRAND_ID) values (?, ?)
> 2010-01-30 20:34:37,198 DEBUG [org.hibernate.jdbc.AbstractBatcher] (http-0.0.0.0-8080-2) Executing batch size: 1
> 2010-01-30 20:34:37,211 DEBUG [org.hibernate.jdbc.AbstractBatcher] (http-0.0.0.0-8080-2) about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
> 2010-01-30 20:34:37,215 DEBUG [org.hibernate.transaction.JDBCTransaction] (http-0.0.0.0-8080-2) committed JDBC Connection
> You can see in the log, that the debug here says that it should be store_id 1 and brand_id 9, but in the debug statements around this, and when it actually does the insert, it reverses these, and inserts it as store_id 9 and brand_id 1.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list