From: Urberg, J. <ju...@ve...> - 2002-08-15 15:13:02
|
On to the second issue: >>2) Build a message with multiple addressees. I try to save the message and >>get a "com.sybase.jdbc2.jdbc.SybBatchUpdateException: JZ0BE: >>BatchUpdateException: Error occurred while executing batch statement: ASA >>Error -143: Column '@p1' not found" SQL Exception. Here is the SQL: >Ah. interesting. My Sybase install broke a while back so I didn't get a >chance to test its JDBC2 compliance. I imagine that setting > >hibernate.use_jdbc2=false I tried that and the same problem happened. I'm using the JConnect 5.5 driver which claims to be JDBC2 compliant. >Actually, just for an experiment ... could you >please try using a vm.long style id generation and see if you recieve the >same exception? (just to rule out the possibility that native keygeneration >has anything to do with it....) That also had no effect. I had worked around the problem by manually loading and saving the MessageAddressee collection. When I put things back, I still got an exception saving, but it was a bit different (Ugh). I've attached the source and TRACE below. Sorry I didn't get back to you right away. I've been dealing with some other issues. Regards, John -------------------------------------------------- Here's the code where I save a message: try { // get the sender Staff staff = aMessage.getSender(); session.update(staff); // get the message boxes List boxes = session.find( "select box " + " from box " + " in class domain.MessageBox" + " order by box.id"); // add the message to each addressees' mailbox List newEntries = new ArrayList(); for (Iterator i = aMessage.getAddressees().iterator(); i.hasNext(); ) { Addressee addressee = (Addressee)i.next(); // the group was loaded in another session if (addressee.isGroup()) { session.update(addressee); } Collection recipients = addressee.getStaffEntries(); for (Iterator r = recipients.iterator(); r.hasNext(); ) { Staff recipient = (Staff)r.next(); session.update(recipient); MessageBoxEntry newEntry = new MessageBoxEntry(); newEntry.setMessage(aMessage); newEntry.setMessageBox((MessageBox)boxes.get(0)); newEntry.setStaff(recipient); newEntries.add(newEntry); } } // add the message to the sender's mailbox MessageBoxEntry sentEntry = new MessageBoxEntry(); sentEntry.setMessage(aMessage); sentEntry.setMessageBox((MessageBox)boxes.get(1)); sentEntry.setStaff(staff); // save the message aMessage.setDateSent(new Date()); session.save(aMessage); // add entries for (Iterator i = newEntries.iterator(); i.hasNext(); ) { session.save(i.next()); } session.save(sentEntry); session.flush(); } finally { session.close(); } Here's the TRACE of this portion of the code: 7625 [main] DEBUG <cirrus.hibernate.connection.DriverManagerConnectionProvider> Using cached JDBC connection 7625 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> opened session 7625 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> updating domain.StaffImpl#49 7625 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> find: select box from box in class domain.MessageBox order by box.id 7625 [main] DEBUG <cirrus.hibernate.query.QueryTranslator> compiling query 7625 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> flushing session 7640 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> Updating entity: domain.StaffImpl#49 7640 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> Flushing: 0 insertions, 1 updates, 0 deletions to 1 objects 7640 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> Flushing: 0 insertions, 0 updates, 0 deletions to 0 collections 7640 [main] DEBUG <cirrus.hibernate.query.QueryTranslator> HQL: select box from box in class domain.MessageBox order by box.id 7640 [main] DEBUG <cirrus.hibernate.query.QueryTranslator> SQL: SELECT box.id, box.description FROM message_box box ORDER BY box.id 7640 [main] DEBUG <cirrus.hibernate.impl.SessionFactoryImpl> prepared statement get: SELECT box.id, box.description FROM message_box box ORDER BY box.id Hibernate: SELECT box.id, box.description FROM message_box box ORDER BY box.id 7640 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> Preparing statement: SELECT box.id, box.description FROM message_box box ORDER BY box.id 7640 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> Initializing object from ResultSet: 1 7640 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Hydrating entity: domain.MessageBox#1 7656 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> Initializing object from ResultSet: 2 7656 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Hydrating entity: domain.MessageBox#2 7656 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> recaching 7656 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> updating domain.StaffImpl#45 7656 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> updating domain.StaffImpl#49 7656 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> updating domain.StaffImpl#1 7656 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> saving domain.Message#native 7656 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Inserting entity: domain.Message (native id) 7656 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Inserting entity: domain.Message#null 7656 [main] DEBUG <cirrus.hibernate.impl.SessionFactoryImpl> prepared statement get: insert into message_table ( subject, message_text, date_sent, staff_id ) values ( ?, ?, ?, ? ) Hibernate: insert into message_table ( subject, message_text, date_sent, staff_id ) values ( ?, ?, ?, ? ) 7656 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> Preparing statement: insert into message_table ( subject, message_text, date_sent, staff_id ) values ( ?, ?, ?, ? ) 7671 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Dehydrating entity: domain.Message#null 7671 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> recaching 7671 [main] DEBUG <cirrus.hibernate.impl.SessionFactoryImpl> prepared statement get: select @@identity Hibernate: select @@identity 7671 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> Preparing statement: select @@identity 7671 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Natively generated identity: 67463941285871630 7687 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> recaching 7687 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> saving domain.MessageAddressee#native 7687 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Inserting entity: domain.MessageAddressee (native id) 7687 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Inserting entity: domain.MessageAddressee#null 7687 [main] DEBUG <cirrus.hibernate.impl.SessionFactoryImpl> prepared statement get: insert into message_addressee ( message_id, addressee_group_id, staff_id ) values ( ?, ?, ? ) Hibernate: insert into message_addressee ( message_id, addressee_group_id, staff_id ) values ( ?, ?, ? ) 7687 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> Preparing statement: insert into message_addressee ( message_id, addressee_group_id, staff_id ) values ( ?, ?, ? ) 7687 [main] DEBUG <cirrus.hibernate.impl.ClassPersister> Dehydrating entity: domain.MessageAddressee#null 7703 [main] WARN <cirrus.hibernate.helpers.JDBCExceptionReporter> SQL Error: 233, SQLState: 23502 7703 [main] ERROR <cirrus.hibernate.helpers.JDBCExceptionReporter> ASA Error -195: Column 'message_id' in table 'message_addressee' cannot be NULL 7703 [main] DEBUG <cirrus.hibernate.ps.PreparedStatementCache> recaching 7703 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> closing session 7703 [main] DEBUG <cirrus.hibernate.impl.SessionImpl> disconnecting session 7703 [main] DEBUG <cirrus.hibernate.connection.DriverManagerConnectionProvider> returning connection to pool |