Code:
public class StartKlasse
{
final EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("HalloWie");
public static void main(String[] args)
{
Mitarbeiter ma1 = new Mitarbeiter();
ma1.setName("Name1");
ma1.setVorname("VName1");
Mitarbeiter ma2 = new Mitarbeiter();
ma2.setName("Name2");
ma2.setVorname("Vorname2");
Collection <Projekt> cp1 = new ArrayList <Projekt>();
Collection <Projekt> cp2 = new ArrayList <Projekt>();
Projekt p1 = new Projekt();
p1.setName("Projekt1");
Projekt p2 = new Projekt();
p2.setName("Projekt2");
Projekt p3 = new Projekt();
p3.setName("Projekt3");
cp1.add(p1);
cp1.add(p2);
cp1.add(p3);
cp2.add(p1);
cp2.add(p2);
cp2.add(p3);
ma1.setProjekt(cp1);
ma2.setProjekt(cp2);
StartKlasse sk = new StartKlasse();
sk.persist(ma1); <-------
sk.persist(ma2);
sk.ausgabe();
}
public void persist(Object object)
{
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
em.persist(object);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
@SuppressWarnings("unchecked")
public void ausgabe(){
final EntityManager em = emf.createEntityManager();
for (Iterator <Mitarbeiter> itma = em.createQuery("select m from Mitarbeiter m").getResultList().iterator();itma.hasNext();)
{
System.out.println(itma.next().getName());
for (Iterator <Projekt> itp = itma.next().getProjekt().iterator();itp.hasNext();)
{
System.out.println( itp.next().getName());
}
}
em.close();
}
}
Hallo Hallo.
Da wo der <---- ist, ist das Problem. Das Problem hier ist: kommentier ich eines von beiden aus, funktioniert alles. Wenn ich beide persistieren lassen will kommt folgende exception.
Code:
javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 1.0.1 (Build 20080905)): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.derby.client.am.BatchUpdateException: Fehler bei nicht atomarer Batch-Operation. Der Batch wurde übergeben. Bei einem Batch-Member ist jedoch mindestens eine Ausnahme eingetreten. Mit getNextException() können Sie die Ausnahmen für bestimmte Batch-Elemente abrufen.
Error Code: 20000
Query: DataModifyQuery()
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:102)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:63)
at de.xxxxx.xxxxxx.model.StartKlasse.persist(StartKlasse.java:57)
at de.xxxxx.xxxxxx.model.StartKlasse.main(StartKlasse.java:47)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 1.0.1 (Build 20080905)): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.apache.derby.client.am.BatchUpdateException: Fehler bei nicht atomarer Batch-Operation. Der Batch wurde übergeben. Bei einem Batch-Member ist jedoch mindestens eine Ausnahme eingetreten. Mit getNextException() können Sie die Ausnahmen für bestimmte Batch-Elemente abrufen.
Error Code: 20000
Query: DataModifyQuery()
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:313)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeJDK12BatchStatement(DatabaseAccessor.java:790)
at org.eclipse.persistence.internal.databaseaccess.ParameterizedSQLBatchWritingMechanism.executeBatchedStatements(ParameterizedSQLBatchWritingMechanism.java:144)
at org.eclipse.persistence.internal.databaseaccess.ParameterizedSQLBatchWritingMechanism.appendCall(ParameterizedSQLBatchWritingMechanism.java:88)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:534)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:500)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:855)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:204)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:190)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:233)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:213)
at org.eclipse.persistence.internal.queries.StatementQueryMechanism.executeNoSelect(StatementQueryMechanism.java:116)
at org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:66)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:666)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:585)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2587)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1178)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1162)
at org.eclipse.persistence.mappings.ManyToManyMapping.insertIntoRelationTable(ManyToManyMapping.java:831)
at org.eclipse.persistence.mappings.ManyToManyMapping.performDataModificationEvent(ManyToManyMapping.java:989)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:197)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3129)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1241)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:478)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1330)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:159)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1002)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:84)
... 3 more
Caused by: org.apache.derby.client.am.BatchUpdateException: Fehler bei nicht atomarer Batch-Operation. Der Batch wurde übergeben. Bei einem Batch-Member ist jedoch mindestens eine Ausnahme eingetreten. Mit getNextException() können Sie die Ausnahmen für bestimmte Batch-Elemente abrufen.
at org.apache.derby.client.am.Agent.endBatchedReadChain(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.executeBatchRequestX(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.executeBatchX(Unknown Source)
at org.apache.derby.client.am.PreparedStatement.executeBatch(Unknown Source)
at org.eclipse.persistence.internal.databaseaccess.DatabasePlatform.executeBatch(DatabasePlatform.java:1663)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeJDK12BatchStatement(DatabaseAccessor.java:777)
... 29 more
Exception in thread "main" java.lang.IllegalStateException:
Exception Description: No transaction is currently active
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.rollback(EntityTransactionImpl.java:122)
at de.xxxxx.xxxxxx.model.StartKlasse.persist(StartKlasse.java:60)
at de.xxxxx.xxxxxx.model.StartKlasse.main(StartKlasse.java:47)
Kann mir hier vielleicht einer weiterhelfen? Ich meine das kann doch nicht sein oder? Mit einem alleine klappt es und sobald 2 hintereinander ausgeführt werden knallt es.