package org.openlca.core.database; import org.junit.Assert; import org.junit.Test; import org.openlca.core.Tests; import org.openlca.core.model.Flow; import org.openlca.core.model.FlowPropertyFactor; public class IdGeneratorTest { @Test public void testCascadeId() { IDatabase database = Tests.getDb(); Flow flow = new Flow(); FlowPropertyFactor factor1 = new FlowPropertyFactor(); flow.getFlowPropertyFactors().add(factor1); Assert.assertEquals(0L, factor1.getId()); // when inserting an entity we use persist -> EclipseLink directly // generates an ID for cascade objects database.createDao(Flow.class).insert(flow); Assert.assertTrue(factor1.getId() > 0L); // new ID FlowPropertyFactor factor2 = new FlowPropertyFactor(); flow.getFlowPropertyFactors().add(factor2); Assert.assertEquals(0L, factor2.getId()); // when updating an entity we use merge -> EclipseLink does not // manipulates the original object graph Flow managedFlow = database.createDao(Flow.class).update(flow); Assert.assertEquals(0L, factor2.getId()); // still no ID set // for the managed flow has generated IDs for the cascade objects int count = 0; for (FlowPropertyFactor f : managedFlow.getFlowPropertyFactors()) { Assert.assertTrue(f.getId() > 0L); count++; } Assert.assertTrue(count == 2); } }