Pessoal,
Estou fazendo um programa, onde um curso tem varias disciplinas, logo, quando eu inserir um curso no banco de dados (através do Hibernate) quero que seja inserido também todas as disciplinas dentro dele, para isso setei o cascade=“save-update” do one-to-many, porem me dá o seguinte erro.
[color=red]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: /* insert hibernate.Curso / insert into Curso (nome, descricao, id) values (?, ?, ?)
Hibernate: / insert hibernate.Disciplina / insert into Disciplina (nome, ementa, Curso_id, id) values (?, ?, ?, ?)
Hibernate: / insert hibernate.Disciplina / insert into Disciplina (nome, ementa, Curso_id, id) values (?, ?, ?, ?)
Hibernate: / insert hibernate.Disciplina / insert into Disciplina (nome, ementa, Curso_id, id) values (?, ?, ?, ?)
Initializing c3p0 pool… com.mchange.v2.c3p0.PoolBackedDataSource@15e83f9 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@910040 [ acquireIncrement -> 2, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, idleConnectionTestPeriod -> 3000, initialPoolSize -> 2, maxIdleTime -> 5000, maxPoolSize -> 10, maxStatements -> 10, maxStatementsPerConnection -> 0, minPoolSize -> 2, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@12d3205 [ description -> null, driverClass -> null, factoryClassLocation -> null, jdbcUrl -> jdbc:mysql://localhost/hibernate?autoReconnect=true, properties -> {user=*****, password=******} ] , preferredTestQuery -> null, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ] , factoryClassLocation -> null, numHelperThreads -> 3, poolOwnerIdentityToken -> 15e83f9 ]
Exception in thread “main” org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:86)
at Hibernate.main(Hibernate.java:91)
Caused by: java.sql.BatchUpdateException: Column ‘nome’ cannot be null
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:652)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1722)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
… 8 more
Java Result: 1[/color]
Meu codigo no main:
[code]// Curso e suas disciplinas
Disciplina D1 = new Disciplina();
D1.setNome(“Matemática”);
D1.setEmenta(“123456789”);
Disciplina D2 = new Disciplina();
D1.setNome("Português");
D1.setEmenta("123456789");
Disciplina D3 = new Disciplina();
D1.setNome("Física");
D1.setEmenta("123456789");
Curso curso = new Curso();
curso.setNome("Supletivo");
curso.setDescricao("Descrição da disciplina em questão.");
D1.setCurso(curso);
D2.setCurso(curso);
D3.setCurso(curso);
curso.getDisciplinas().add(D1);
curso.getDisciplinas().add(D2);
curso.getDisciplinas().add(D3);
sessao.save(curso);[/code]
E o meu Curso.hbm.xml, vejam se setei da forma correta o cascade:
[code]<?xml version="1.0" encoding="UTF-8"?>
<id name="id">
<generator class="increment"/>
</id>
<property name="nome"/>
<property name="descricao"/>
<set name="disciplinas" inverse="true" cascade="save-update">
<key column="Curso_id"/>
<one-to-many class="hibernate.Disciplina"/>
</set>
</class>
[/code]
Agradeço desde já toda ajuda possível.
Abraços.