Bom dia, estou tendo a seguinde dificuldade, tenho uma classe aplicação e essa classe aplicação possui uma coleção de parametros e quando eu adiciono a aplicação adiciono os parametro em uma table juntos, ate ai tudo bem, consigo normalmente dessa forma:
public void insert() {
Application app = new Application();
app.setName(nameApplication.getText());
app.setDescription(descriptionApplication.getText());
int agentSelect = agentCombo.getSelectionIndex();
Agent agent = agentDao.getAgent(Integer.parseInt(agentCombo.getData(
agentCombo.getItem(agentSelect)).toString()));
app.setAgent(agent);
int serverSelect = serverCombo.getSelectionIndex();
Server server = serverDao.getServer(Integer.parseInt(serverCombo
.getData(serverCombo.getItem(serverSelect)).toString()));
app.setServer(server);
ApplicationDAO appDao = new ApplicationDAO();
Parameter param = new Parameter();
ParametroDAO paramDao = new ParametroDAO();
Collection<Parameter> listParameter = new HashSet<Parameter>();
for (TableItem t : tableValue.getItems()) {
param.setValue(t.getText(1));
param.setName(t.getText(0));
param.setAgent(agent);
param.setApplication(appDao.getLastCode());
paramDao.insert(param);
listParameter.add(param);
}
app.setParameters(listParameter);
appDao.insert(app);
dai quando estou tentando atualizar essa aplicação preencho a tabela de parametros setando a data dos itens
public void fillTable() {
Collection<Parameter> itemsParameter = app.getParameters();
for (Parameter p : itemsParameter) {
item = new TableItem(tableValue, SWT.NONE);
item.setText(new String[] { p.getName(), p.getValue() });
item.setData(p);
}
}
porem quando vou atualizar da o seguinte erro
22063 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1407, SQLState: 72000
22063 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01407: cannot update ("GI"."PARAMETER"."CODE_APPLICATION") to NULL
22063 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1407, SQLState: 72000
22063 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-01407: cannot update ("GI"."PARAMETER"."CODE_APPLICATION") to NULL
22063 [main] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:169)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at br.com.md2net.gi.dao.ApplicationDAO.update(ApplicationDAO.java:93)
at br.com.md2net.gi.dialogs.ApplicationDialog.update(ApplicationDialog.java:386)
at br.com.md2net.gi.dialogs.ApplicationDialog.okPressed(ApplicationDialog.java:287)
at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:472)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at br.com.md2net.gi.application.Application.start(Application.java:23)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Caused by: java.sql.BatchUpdateException: ORA-01407: cannot update ("GI"."PARAMETER"."CODE_APPLICATION") to NULL
at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:367)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:8739)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 38 more
esse é o metodo que uso para atualizar ou melhor tentar atualizar
public void update() {
Application app = new Application();
ApplicationDAO appDao = new ApplicationDAO();
String application = TableApplicationView.table.getItem(
TableApplicationView.table.getSelectionIndex()).getText(0);
app = appDao.getAplication(Integer.parseInt(TableApplicationView.table
.getItem(TableApplicationView.table.getSelectionIndex())
.getData(application).toString()));
app.setName(nameApplication.getText());
app.setDescription(descriptionApplication.getText());
int agentSelect = agentCombo.getSelectionIndex();
Agent agent = agentDao.getAgent(Integer.parseInt(agentCombo.getData(
agentCombo.getItem(agentSelect)).toString()));
app.setAgent(agent);
int serverSelect = serverCombo.getSelectionIndex();
Server server = serverDao.getServer(Integer.parseInt(serverCombo
.getData(serverCombo.getItem(serverSelect)).toString()));
app.setServer(server);
Parameter param = new Parameter();
ParametroDAO paramDao = new ParametroDAO();
Collection<Parameter> listParameter = new HashSet<Parameter>();
for (TableItem t : tableValue.getItems()) {
if(t.getData() == null){
param.setValue(t.getText(1));
param.setName(t.getText(0));
param.setAgent(agent);
param.setApplication(app);
paramDao.update(param);
listParameter.add(param);
}
}
app.setParameters(listParameter);
appDao.update(app);