ealah, kalo datanya salah yah jangan disimpan. kalo maunya data yg salah gak disimpan, yah dirollback aja transaksinya. kalo nyimpennya secara batch, yah data yg udah kesimpan gak usah disimpen lagi.
On Tue, Jun 16, 2009 at 4:46 PM, onsir salman<[email protected]> wrote: > > > skenario lengkapnya > > Anal.java > @Entity > @Table(name="anal", > uniqueConstraints = {...@uniqueconstraint( > columnNames={"CODE_ANAL"})} > ) > public class UserDefineAnalysis implements java.io.Serializable { > > @Id > @GeneratedValue(generator="system-uuid") > @GenericGenerator(name="system-uuid",strategy="uuid") > @Column(name="ID_ANAL") > private String idAnal; > > @Column(name="CODE_ANAL", nullable=false, unique=false, length=15) > private String codeAnal; > > Jamsos.java > @Entity > @Table(name="jamsos", > uniqueConstraints = {...@uniqueconstraint( > columnNames={"CODE", > "ID_ANAL" > })} > ) > public class SchemaJamsos implements java.io.Serializable{ > > @Id > @GeneratedValue(generator="system-uuid") > @GenericGenerator(name="system-uuid",strategy="uuid") > @Column(name="ID_JAMSOS") > private String idJamsos; > > @Column(name="CODE", nullable=false, unique=false, length=15) > private String code; > > @Column(name="RATE") > private Float rate; > > > @ManyToOne() > @JoinColumn(name="ID_ANAL") > private Anal anal; > } > > AbstractJamsos.java > > protected void save(Object obj1) { > startOperation(); > try { > HibernateConnection.session.save(obj1); > HibernateConnection.session.flush(); > HibernateConnection.session.clear(); > } catch (Exception e) { > e.printStackTrace(); > tx.rollback(); > } finally { > HibernateConnection.closeSession(); > } > } > > protected void startOperation() throws HibernateException { > HibernateConnection.getOpenSession(); > tx = HibernateConnection.session.beginTransaction(); > } > > JamsosDao.java > public void save(Object obj){ > return super.save(obj); > } > > > > cerita programnya: > 1. tampilkan data dari tabel anal lalu tampilkan ke jTable1 > private void showJamsos() { > List<Anal> list; > try { > list = analDao.getAll(); > int x = 0; > Object[][] data = new Object[list.size()][9]; > for (Anal u : list) { > data[x][0] = u.getIdAnal(); > data[x][1] = u.getCodeAnal(); > data[x][3] = ""; > data[x][4] = "0.0"; > ++x; > } > } > > hasil di jtable > HASIL > > ID ANAL CODE ANAL CHARGE RATE > qwerty0001 J2 ME 0.0 > uipa0000se J3 GS 0.0 > zxcvbu4210 J4 ME 0.0 > > > utk simpan data > btnSimpan { > for (int i = 0; i < jTable1.getRowCount(); i++) { > > anal = new Anal(); > anal.setIdAnal(jTable1.getValueAt(i, 0).toString()); > > Jamsos j = new jamsos(); > schemaJamsos.setCode(txtKode.getText()); > schemaJamsos.setRate(Float.parseFloat(jTable1.getValueAt(i, 3).toString())); > schemaJamsos.setAnal(anal); > errSchema = schemaJamsosDao.update(schemaJamsos, action, onProcess); > } > } > > kejadianya, contoh > ID ANAL CODE ANAL CHARGE RATE > qwerty0001 J2 ME 0.0 > uipa0000se J3 GS 0.0 (saya input 4,5) > zxcvbu4210 J4 ME 0.0 > lalu klik btnSimpan > data akan error dan tampil pesan. > > java.lang.NumberFormatException: For input string: "4,5" > at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) > at java.lang.Float.parseFloat(Float.java:422) > at > mst.pyrl.view.ui.datamaster.JIFSchemaJamsos.btnSimpanActionPerformed(JIFSchemaJamsos.java:365) > > lalu saya perbaiki datanya spt ini > ID ANAL CODE ANAL CHARGE RATE > qwerty0001 J2 ME 0.0 > uipa0000se J3 GS 4.5 > zxcvbu4210 J4 ME 0.0 > > dan klik btnSimpan > tampil error spt ini > > 2009-06-16 11:17:53,828 [AWT-EventQueue-0] ERROR > org.hibernate.util.JDBCExceptionReporter Duplicate entry 'TRT01-qwerty0001' > for key 2 > 2009-06-16 11:17:53,828 [AWT-EventQueue-0] ERROR > org.hibernate.event.def.AbstractFlushingEventListener Could not synchronize > database state with session > org.hibernate.exception.ConstraintViolationException: Could not execute JDBC > batch update > at > org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) > at > org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) > at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253) > at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237) > at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141) > at > org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) > at > org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) > at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) > at > mst.pyrl.hibernate.dao.hql.AbstractSchemaJamsosHql.save(AbstractSchemaJamsosHql.java:40) > at mst.pyrl.hibernate.dao.SchemaJamsosDao.save(SchemaJamsosDao.java:26) > at > mst.pyrl.view.ui.datamaster.JIFSchemaJamsos.btnSimpanActionPerformed(JIFSchemaJamsos.java:368) > at > mst.pyrl.view.ui.datamaster.JIFSchemaJamsos.access$200(JIFSchemaJamsos.java:48) > at > mst.pyrl.view.ui.datamaster.JIFSchemaJamsos$3.actionPerformed(JIFSchemaJamsos.java:153) > at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) > at > javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) > at > javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) > at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) > at > javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) > at java.awt.Component.processMouseEvent(Component.java:6134) > at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) > at java.awt.Component.processEvent(Component.java:5899) > at java.awt.Container.processEvent(Container.java:2023) > at java.awt.Component.dispatchEventImpl(Component.java:4501) > at java.awt.Container.dispatchEventImpl(Container.java:2081) > at java.awt.Component.dispatchEvent(Component.java:4331) > at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301) > at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965) > at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895) > at java.awt.Container.dispatchEventImpl(Container.java:2067) > at java.awt.Window.dispatchEventImpl(Window.java:2458) > at java.awt.Component.dispatchEvent(Component.java:4331) > at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) > at > java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) > at > java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) > at > java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) > at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) > at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) > at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) > Caused by: java.sql.BatchUpdateException: Duplicate entry 'TRT01-qwerty0001' > for key 2 > at > com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1666) > at > com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1082) > at > org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) > at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) > ... 35 more > > 2009-06-16 11:18:00,234 [AWT-EventQueue-0] INFO > org.hibernate.impl.SessionFactoryImpl closing > 2009-06-16 11:18:00,250 [AWT-EventQueue-0] INFO > org.hibernate.connection.DriverManagerConnectionProvider cleaning up > connection pool: jdbc:mysql://localhost/a123 > BUILD SUCCESSFUL (total time: 1 minute 58 seconds) > > > > > > > > > > > -- syaiful.mukhlis gtalk:[email protected]

