This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git commit 73b78f3179d2c1b3de5f69b2a287ef166a41e102 Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Aug 8 10:44:27 2018 +0200 Persisting orphan should not be possible if model says so fixes #663 --- .../persistence/EntityVisitorExportXmlTest.java | 8 ++++-- .../mapping/test1/SimpleOneToManyRelationTest.java | 20 ++++++++------ .../SimpleOneToManyRelationWithRoleNamedTest.java | 16 ++++++----- .../mapping/test11/SimpleOneToManyUniqueTest.java | 7 +++-- .../SimpleOneToManyWithRoleNamedUniqueTest.java | 4 ++- .../it/mapping/test5/OneToManyCompositionTest.java | 2 +- .../mapping/test6/SimpleOneToManyIndexedTest.java | 13 ++++++--- .../SimpleOneToManyWithRoleNamedIndexedTest.java | 32 ++++++++++++++-------- .../mapping/test7/SimpleOneToManyOrderByTest.java | 17 ++++++++---- .../mapping/test7/SimpleOneToManyOrderedTest.java | 13 ++++++--- .../templates/EntityHibernateMappingGenerator.java | 8 ++++-- 11 files changed, 93 insertions(+), 47 deletions(-) diff --git a/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/EntityVisitorExportXmlTest.java b/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/EntityVisitorExportXmlTest.java index a3f7d2de..aa90141f 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/EntityVisitorExportXmlTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/legacy/persistence/EntityVisitorExportXmlTest.java @@ -74,15 +74,19 @@ public class EntityVisitorExportXmlTest { // employe EmployeTopiaDao employeDAO = newContext.getEmployeDao(); - Employe empl1 = employeDAO.create(Employe.PROPERTY_NAME, "boss", Employe.PROPERTY_SALARY, 30000); + Employe empl1 = employeDAO.newInstance(Employe.PROPERTY_NAME, "boss", Employe.PROPERTY_SALARY, 30000); + clCompany.addEmploye(empl1); + employeDAO.create(empl1); AddressTopiaDao adressDAO = newContext.getAddressDao(); Address addr1 = adressDAO.create(Address.PROPERTY_CITY, "Nantes", Address.PROPERTY_ADRESS, "12 Avenue Jules Vernes"); empl1.setAddress(addr1); - Employe empl2 = employeDAO.create(Employe.PROPERTY_NAME, "boss2", Employe.PROPERTY_SALARY, 29000); + Employe empl2 = employeDAO.newInstance(Employe.PROPERTY_NAME, "boss2", Employe.PROPERTY_SALARY, 29000); + clCompany.addEmploye(empl2); Address addr2 = adressDAO.create(Address.PROPERTY_CITY, "Nantes", Address.PROPERTY_ADRESS, "12 Avenue Jules Vernes"); empl2.setAddress(addr2); + employeDAO.create(empl2); // departement DepartmentTopiaDao departmentDAO = newContext.getDepartmentDao(); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationTest.java index 1d660940..a778e6f2 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationTest.java @@ -64,11 +64,14 @@ public class SimpleOneToManyRelationTest extends AbstractMappingTest { Assert.assertEquals(0, nbA); Assert.assertEquals(0, nbB); - A1 a = aDAO.create(); - B1 b = bDAO.create(); + A1 a = aDAO.newInstance(); + B1 b = bDAO.newInstance(); a.addB1(b); + aDAO.create(a); + bDAO.create(b); + tx.commit(); nbA = aDAO.count(); @@ -87,6 +90,7 @@ public class SimpleOneToManyRelationTest extends AbstractMappingTest { Assert.assertEquals(b, bBis); Assert.assertEquals(aBis.getB1().iterator().next(), bBis); } + @Test public void delete() throws TopiaException { @@ -98,19 +102,19 @@ public class SimpleOneToManyRelationTest extends AbstractMappingTest { Assert.assertEquals(1, nbA); Assert.assertEquals(1, nbB); - A1 a = aDAO.findAll().get(0); - aDAO.delete(a); + B1 b = bDAO.findAll().get(0); + bDAO.delete(b); tx.commit(); nbA = aDAO.count(); nbB = bDAO.count(); - Assert.assertEquals(0, nbA); - Assert.assertEquals(1, nbB); + Assert.assertEquals(1, nbA); + Assert.assertEquals(0, nbB); - B1 b = bDAO.findAll().get(0); - bDAO.delete(b); + A1 a = aDAO.findAll().get(0); + aDAO.delete(a); tx.commit(); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationWithRoleNamedTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationWithRoleNamedTest.java index fa23389d..bbeea9d5 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationWithRoleNamedTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test1/SimpleOneToManyRelationWithRoleNamedTest.java @@ -65,10 +65,12 @@ public class SimpleOneToManyRelationWithRoleNamedTest extends AbstractMappingTes Assert.assertEquals(0, nbB); A11 a = aDAO.create(); - B11 b = bDAO.create(); + B11 b = bDAO.newInstance(); a.addRoleB11(b); + bDAO.create(b); + tx.commit(); nbA = aDAO.count(); @@ -99,19 +101,19 @@ public class SimpleOneToManyRelationWithRoleNamedTest extends AbstractMappingTes Assert.assertEquals(1, nbA); Assert.assertEquals(1, nbB); - A11 a = aDAO.findAll().get(0); - aDAO.delete(a); + B11 b = bDAO.findAll().get(0); + bDAO.delete(b); tx.commit(); nbA = aDAO.count(); nbB = bDAO.count(); - Assert.assertEquals(0, nbA); - Assert.assertEquals(1, nbB); + Assert.assertEquals(1, nbA); + Assert.assertEquals(0, nbB); - B11 b = bDAO.findAll().get(0); - bDAO.delete(b); + A11 a = aDAO.findAll().get(0); + aDAO.delete(a); tx.commit(); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyUniqueTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyUniqueTest.java index 895ae659..2289707d 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyUniqueTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyUniqueTest.java @@ -67,12 +67,15 @@ public class SimpleOneToManyUniqueTest extends AbstractMappingTest { Assert.assertEquals(0, nbA); Assert.assertEquals(0, nbB); - A11A a = aDAO.create(); - B11A b = bDAO.create(); + A11A a = aDAO.newInstance(); + B11A b = bDAO.newInstance(); a.addB11A(b); a.addB11A(b); + aDAO.create(a); + bDAO.create(b); + tx.commit(); nbA = aDAO.count(); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyWithRoleNamedUniqueTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyWithRoleNamedUniqueTest.java index 0645271c..68fbffa0 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyWithRoleNamedUniqueTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test11/SimpleOneToManyWithRoleNamedUniqueTest.java @@ -69,11 +69,13 @@ public class SimpleOneToManyWithRoleNamedUniqueTest extends AbstractMappingTest Assert.assertEquals(0, nbB); A11B a = aDAO.create(); - B11B b = bDAO.create(); + B11B b = bDAO.newInstance(); a.addRoleB111(b); a.addRoleB111(b); + bDAO.create(b); + tx.commit(); nbA = aDAO.count(); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test5/OneToManyCompositionTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test5/OneToManyCompositionTest.java index 27c3beb0..e96c86da 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test5/OneToManyCompositionTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test5/OneToManyCompositionTest.java @@ -65,7 +65,7 @@ public class OneToManyCompositionTest extends AbstractMappingTest { Assert.assertEquals(0, nbB); A5 a = aDAO.create(); - B5 b = bDAO.create(); + B5 b = bDAO.newInstance(); a.addB5(b); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyIndexedTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyIndexedTest.java index fae03107..4c424ed6 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyIndexedTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyIndexedTest.java @@ -68,12 +68,17 @@ public class SimpleOneToManyIndexedTest extends AbstractMappingTest { Assert.assertEquals(0, nbB); A6 a = aDAO.create(); - B6 b = bDAO.create(); - B6 b2 = bDAO.create(); - B6 b3 = bDAO.create(); + B6 b = bDAO.newInstance(); + B6 b2 = bDAO.newInstance(); + B6 b3 = bDAO.newInstance(); a.addB6(b); a.addB6(b2); + a.addB6(b3); + + bDAO.create(b); + bDAO.create(b2); + bDAO.create(b3); tx.commit(); @@ -85,7 +90,7 @@ public class SimpleOneToManyIndexedTest extends AbstractMappingTest { A6 aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(2, aBis.sizeB6()); + Assert.assertEquals(3, aBis.sizeB6()); List<B6> bs = aBis.getB6(); Assert.assertEquals(b, bs.get(0)); Assert.assertEquals(b2, bs.get(1)); diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyWithRoleNamedIndexedTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyWithRoleNamedIndexedTest.java index f732a85d..4b67b9b7 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyWithRoleNamedIndexedTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test6/SimpleOneToManyWithRoleNamedIndexedTest.java @@ -68,12 +68,17 @@ public class SimpleOneToManyWithRoleNamedIndexedTest extends AbstractMappingTest Assert.assertEquals(0, nbB); A61 a = aDAO.create(); - B61 b = bDAO.create(); - B61 b2 = bDAO.create(); - B61 b3 = bDAO.create(); + B61 b = bDAO.newInstance(); + B61 b2 = bDAO.newInstance(); + B61 b3 = bDAO.newInstance(); a.addRoleB61(b); a.addRoleB61(b2); + a.addRoleB61(b3); + + bDAO.create(b); + bDAO.create(b2); + bDAO.create(b3); tx.commit(); @@ -85,15 +90,17 @@ public class SimpleOneToManyWithRoleNamedIndexedTest extends AbstractMappingTest A61 aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(2, aBis.sizeRoleB61()); + Assert.assertEquals(3, aBis.sizeRoleB61()); List<B61> bs = aBis.getRoleB61(); Assert.assertEquals(b, bs.get(0)); Assert.assertEquals(b2, bs.get(1)); + Assert.assertEquals(b3, bs.get(2)); // change order List<B61> bsBis; bsBis = Lists.newArrayList(); + bsBis.add(b3); bsBis.add(b2); bsBis.add(b); a.setRoleB61(bsBis); @@ -101,14 +108,16 @@ public class SimpleOneToManyWithRoleNamedIndexedTest extends AbstractMappingTest aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(2, aBis.sizeRoleB61()); + Assert.assertEquals(3, aBis.sizeRoleB61()); bs = aBis.getRoleB61(); - Assert.assertEquals(b2, bs.get(0)); - Assert.assertEquals(b, bs.get(1)); + Assert.assertEquals(b3, bs.get(0)); + Assert.assertEquals(b2, bs.get(1)); + Assert.assertEquals(b, bs.get(2)); // rechange order bsBis = Lists.newArrayList(); + bsBis.add(b2); bsBis.add(b3); bsBis.add(b2); bsBis.add(b); @@ -117,11 +126,12 @@ public class SimpleOneToManyWithRoleNamedIndexedTest extends AbstractMappingTest aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(3, aBis.sizeRoleB61()); + Assert.assertEquals(4, aBis.sizeRoleB61()); bs = aBis.getRoleB61(); - Assert.assertEquals(b3, bs.get(0)); - Assert.assertEquals(b2, bs.get(1)); - Assert.assertEquals(b, bs.get(2)); + Assert.assertEquals(b2, bs.get(0)); + Assert.assertEquals(b3, bs.get(1)); + Assert.assertEquals(b2, bs.get(2)); + Assert.assertEquals(b, bs.get(3)); } } \ No newline at end of file diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderByTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderByTest.java index a46254a5..451eee15 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderByTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderByTest.java @@ -70,12 +70,17 @@ public class SimpleOneToManyOrderByTest extends AbstractMappingTest { Assert.assertEquals(0, nbB); A71 a = aDAO.create(); - B71 b = bDAO.create(B71.PROPERTY_NAME, "A"); - B71 b2 = bDAO.create(B71.PROPERTY_NAME, "B"); - B71 b3 = bDAO.create(B71.PROPERTY_NAME, "C"); + B71 b = bDAO.newInstance(B71.PROPERTY_NAME, "A"); + B71 b2 = bDAO.newInstance(B71.PROPERTY_NAME, "B"); + B71 b3 = bDAO.newInstance(B71.PROPERTY_NAME, "C"); a.addB71(b); a.addB71(b2); + a.addB71(b3); + + bDAO.create(b); + bDAO.create(b2); + bDAO.create(b3); tx.commit(); @@ -87,7 +92,7 @@ public class SimpleOneToManyOrderByTest extends AbstractMappingTest { A71 aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(2, aBis.sizeB71()); + Assert.assertEquals(3, aBis.sizeB71()); Collection<B71> bs = aBis.getB71(); Iterator<B71> iterator = bs.iterator(); Assert.assertEquals(b, iterator.next()); @@ -98,6 +103,7 @@ public class SimpleOneToManyOrderByTest extends AbstractMappingTest { bsBis = Lists.newArrayList(); bsBis.add(b2); + bsBis.add(b3); bsBis.add(b); aBis.setB71(bsBis); tx.commit(); @@ -106,11 +112,12 @@ public class SimpleOneToManyOrderByTest extends AbstractMappingTest { aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(2, aBis.sizeB71()); + Assert.assertEquals(3, aBis.sizeB71()); bs = aBis.getB71(); iterator = bs.iterator(); Assert.assertEquals(b, iterator.next()); Assert.assertEquals(b2, iterator.next()); + Assert.assertEquals(b3, iterator.next()); // rechange order diff --git a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderedTest.java b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderedTest.java index cc11f4c1..c5c9295d 100644 --- a/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderedTest.java +++ b/topia-it/src/test/java/org/nuiton/topia/it/mapping/test7/SimpleOneToManyOrderedTest.java @@ -68,12 +68,17 @@ public class SimpleOneToManyOrderedTest extends AbstractMappingTest { Assert.assertEquals(0, nbB); A7 a = aDAO.create(); - B7 b = bDAO.create(); - B7 b2 = bDAO.create(); - B7 b3 = bDAO.create(); + B7 b = bDAO.newInstance(); + B7 b2 = bDAO.newInstance(); + B7 b3 = bDAO.newInstance(); a.addB7(b); a.addB7(b2); + a.addB7(b3); + + bDAO.create(b); + bDAO.create(b2); + bDAO.create(b3); tx.commit(); @@ -85,7 +90,7 @@ public class SimpleOneToManyOrderedTest extends AbstractMappingTest { A7 aBis = aDAO.forTopiaIdEquals(a.getTopiaId()).findUnique(); Assert.assertEquals(a, aBis); - Assert.assertEquals(2, aBis.sizeB7()); + Assert.assertEquals(3, aBis.sizeB7()); List<B7> bs = aBis.getB7(); Assert.assertEquals(b, bs.get(0)); Assert.assertEquals(b2, bs.get(1)); diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java index 7a447551..bede6f29 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java @@ -739,16 +739,20 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String columnName = templateHelper.getDbName(attr); foreignKeyAttribute = " " + generateFromTagValue(HIBERNATE_ATTRIBUTE_FOREIGN_KEY, classContext.getForeignKeyName(columnName)).trim(); } + String notNullAttribute = ""; + if (attr.getReverseAttribute().getMinMultiplicity() > 0) { + notNullAttribute = " " + HIBERNATE_ATTRIBUTE_NOT_NULL + "=\"true\" "; + } if (needsIndex) { /*{<%=prefix%> <<%=collType%> name="<%=attrName%>" <%=inverse%><%=lazy%><%=cascade%>> -<%=prefix%> <key column="<%=reverseAttrDBName%>"<%=foreignKeyAttribute%>/> +<%=prefix%> <key column="<%=reverseAttrDBName%>"<%=foreignKeyAttribute%><%=notNullAttribute%>/> <%=prefix%> <list-index column="<%=reverseAttrDBName%>_idx"/> <%=prefix%> <one-to-many class="<%=attrType%>"/> <%=prefix%> </<%=collType%>> }*/ }else { /*{<%=prefix%> <<%=collType%> name="<%=attrName%>" <%=inverse%><%=orderBy%><%=fetch%><%=lazy%><%=cascade%>> -<%=prefix%> <key column="<%=reverseAttrDBName%>"<%=foreignKeyAttribute%>/> +<%=prefix%> <key column="<%=reverseAttrDBName%>"<%=foreignKeyAttribute%><%=notNullAttribute%>/> <%=prefix%> <one-to-many class="<%=attrType%>"/> <%=prefix%> </<%=collType%>> }*/ -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.