I am trying Many-to-many bi-directional relationship, but failed.
Now the relationship data is saved into mts_event_speaker. Event and Speaker are saved.Code:Event e = new Event(); e.setEventId(1); this.getHibernateTemplate().save(e); Speaker s1 = new Speaker(); s1.setSpeakerId(1); s1.setSpeakerName("s1"); this.getHibernateTemplate().save(s1); Speaker s2 = new Speaker(); s2.setSpeakerId(2); s2.setSpeakerName("s2"); this.getHibernateTemplate().save(s2); List<Speaker> list = new ArrayList<Speaker>(); list.add(s1); list.add(s2); e.setSpeakerList(list); this.getHibernateTemplate().update(e); DetachedCriteria criteria = DetachedCriteria.forClass(Speaker.class); criteria.add(Restrictions.eq("speakerId", new Long(1))); List results = this.getHibernateTemplate().findByCriteria(criteria); Speaker g = (Speaker)results.get(0); System.out.println(g); ///////////// <class name="data.Event" table="mts_event" > <cache usage="read-write"/> <id name="eventId" column="eventId" unsaved-value="-1"> <generator class="assigned"/> </id> <property name="eventName"/> <list name="speakerList" table="mts_event_speaker"> <key column="eventId"/> <index column="idx"/> <many-to-many column="speakerId" class="data.Speaker"/> </list> </class> <class name="data.Speaker" table="mts_speaker" > <cache usage="read-write"/> <id name="speakerId" column="speakerId" unsaved-value="-1"> <generator class="assigned"/> </id> <property name="speakerName"/> <list name="eventList" table="mts_event_speaker"> <key column="speakerId"/> <index column="idx"/> <many-to-many column="eventId" class="data.Event"/> </list> </class>
But I want to load Speaker g. I think g should have not-null eventList, because the relationship data is in database.
Another question, in above java coding, if I use saveOrUpdate, it doesn't work. I don't know why.Code:Hibernate: insert into mts_event_speaker (eventId, idx, speakerId) values (?, ?, ?) 2007-07-13 14:16:03,027 DEBUG [org.hibernate.type.LongType] - binding '1' to parameter: 1 2007-07-13 14:16:03,027 DEBUG [org.hibernate.type.IntegerType] - binding '1' to parameter: 2 2007-07-13 14:16:03,027 DEBUG [org.hibernate.type.LongType] - binding '2' to parameter: 3 2007-07-13 14:16:03,027 DEBUG [org.hibernate.persister.collection.AbstractCollectionPersister] - done inserting collection: 2 rows inserted 2007-07-13 14:16:03,027 DEBUG [org.hibernate.jdbc.AbstractBatcher] - Executing batch size: 2 2007-07-13 14:16:03,043 DEBUG [org.hibernate.jdbc.Expectations] - success of batch update unknown: 0 2007-07-13 14:16:03,043 DEBUG [org.hibernate.jdbc.Expectations] - success of batch update unknown: 1 2007-07-13 14:16:03,043 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 2007-07-13 14:16:03,043 DEBUG [org.hibernate.jdbc.AbstractBatcher] - closing statement 2007-07-13 14:16:03,043 DEBUG [org.hibernate.jdbc.ConnectionManager] - registering flush end 2007-07-13 14:16:03,043 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] - post flush 2007-07-13 14:16:03,058 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to open PreparedStatement (open PreparedStatements: 0, globally: 0) 2007-07-13 14:16:03,058 DEBUG [org.hibernate.SQL] - select this_.speakerId as speakerId8_0_, this_.speakerName as speakerN2_8_0_ from mts_speaker this_ where this_.speakerId=? Hibernate: select this_.speakerId as speakerId8_0_, this_.speakerName as speakerN2_8_0_ from mts_speaker this_ where this_.speakerId=? 2007-07-13 14:16:03,058 DEBUG [org.hibernate.jdbc.AbstractBatcher] - preparing statement 2007-07-13 14:16:03,058 DEBUG [org.hibernate.type.LongType] - binding '1' to parameter: 1 2007-07-13 14:16:03,105 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to open ResultSet (open ResultSets: 0, globally: 0) 2007-07-13 14:16:03,105 DEBUG [org.hibernate.loader.Loader] - processing result set 2007-07-13 14:16:03,105 DEBUG [org.hibernate.loader.Loader] - result set row: 0 2007-07-13 14:16:03,105 DEBUG [org.hibernate.type.LongType] - returning '1' as column: speakerId8_0_ 2007-07-13 14:16:03,105 DEBUG [org.hibernate.loader.Loader] - result row: EntityKey[data.Speaker#1] 2007-07-13 14:16:03,105 DEBUG [org.hibernate.loader.Loader] - done processing result set (1 rows) 2007-07-13 14:16:03,105 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to close ResultSet (open ResultSets: 1, globally: 1) 2007-07-13 14:16:03,105 DEBUG [org.hibernate.jdbc.AbstractBatcher] - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 2007-07-13 14:16:03,105 DEBUG [org.hibernate.jdbc.AbstractBatcher] - closing statement 2007-07-13 14:16:03,121 DEBUG [org.hibernate.loader.Loader] - total objects hydrated: 0 2007-07-13 14:16:03,121 DEBUG [org.hibernate.engine.StatefulPersistenceContext] - initializing non-lazy collections 2007-07-13 14:16:03,121 DEBUG [org.springframework.orm.hibernate3.HibernateTemplate] - Not closing pre-bound Hibernate Session after HibernateTemplate data.Speaker@dab859[speakerId=1,speakerName=s1,eventList=<null>]
What is your idea ?
Thanks.


Reply With Quote