Skip to content

Commit

Permalink
Example for #208 - Multiple unidirectional inverse relations
Browse files Browse the repository at this point in the history
  • Loading branch information
tavoda committed Sep 4, 2019
1 parent a744d08 commit 5037efa
Show file tree
Hide file tree
Showing 5 changed files with 189 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,9 @@ generate.gapClass=true
generate.test.dbunitTestData=false
test.dbunit.dataSetFile=dbunit/TestData.xml

db.product=postgresql
jpa.provider=hibernate
generate.ddl=true

generate.umlgraph=false
generate.modeldoc=false
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
ApplicationPart RelationPart {

Module relation {
"Testing entity for different type of relations"
Entity Person {
scaffold

String first;
String secondName;

// 1:N with backref
- List<@House> owning <-> owner inverse;
- Set<@House> related <-> relation inverse;
- Bag<@House> other <-> something inverse;

// 1:N without backref
- List<@House> owningNoRel inverse;
- Set<@House> relatedNoRel inverse;
- Bag<@House> otherNoRel inverse;

// N:M with backref
- List<@House> owningN <-> ownerN;
- Set<@House> relatedN <-> relationN;
- Bag<@House> otherN <-> somethingN;

// N:M without backref
- List<@House> owningNoRelN;
- Set<@House> relatedNoRelN;
- Bag<@House> otherNoRelN;
}

Entity House {
String street;
String number;
String town;
String state;
String zipCode;
Integer landFieldSize;
Integer houseFootprint;
Integer numberOfFloors;
- @Person owner <-> owning;
- @Person relation <-> related;
- @Person something <-> other;

- Set<@Person> ownerN <-> owningN;
- List<@Person> relationN <-> relatedN;
- Bag<@Person> somethingN <-> otherN;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ import "classpath:/model-cargo.btdesign"
import "classpath:/model-carrier.btdesign"
import "classpath:/model-routing.btdesign"
import "classpath:/model-location.btdesign"
import "classpath:/model-relations.btdesign"

Application DDDSample {
basePackage=org.sculptor.dddsample

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package org.sculptor.dddsample.relation.serviceapi;

import org.junit.Test;
import org.sculptor.dddsample.relation.domain.House;
import org.sculptor.dddsample.relation.domain.Person;
import org.sculptor.dddsample.relation.domain.PersonRepository;
import org.sculptor.dddsample.relation.serviceapi.PersonService;
import org.sculptor.framework.test.AbstractDbUnitJpaTests;
import org.springframework.beans.factory.annotation.Autowired;

import static org.junit.Assert.*;

import java.util.Collection;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
* Spring based transactional test with DbUnit support.
*/
public class PersonServiceTest extends AbstractDbUnitJpaTests implements PersonServiceTestBase {

@Autowired
private PersonService personService;

@PersistenceContext(unitName = "DDDSampleEntityManagerFactory")
private EntityManager entityManager;

@Override
protected String getDataSetFile() {
return "dbunit/TestData.xml";
}

@Test
public void testFindById() throws Exception {
Person feromon = personService.findById(getServiceContext(), 103l);
assertEquals("Feromon", feromon.getFirst());
assertEquals("Smradoch", feromon.getSecondName());
}

@Test
public void testFindAll() throws Exception {
List<Person> all = personService.findAll(getServiceContext());
assertEquals(4, all.size());
boolean was101 = false;
for (Person p : all) {
if (p.getId().equals(101l)) {
Collection<House> owningNoRel = p.getOwningNoRel();
assertEquals(3, owningNoRel.size());
Collection<House> relatedNoRel = p.getRelatedNoRel();
assertEquals(3, relatedNoRel.size());
Collection<House> otherNoRel = p.getOtherNoRel();
assertEquals(3, otherNoRel.size());
was101 = true;
}
}
assertTrue(was101);
}

@Test
@Override
public void testSave() throws Exception {
Person p = new Person();
p.setFirst("Newman");
p.setSecondName("Elemental");
House firstHouse = new House();
firstHouse.setStreet("Atomic");
firstHouse.setNumber("1123");
firstHouse.setNumberOfFloors(2);
firstHouse.setOwner(p);
firstHouse.setRelation(p);
firstHouse.setSomething(p);
firstHouse.setTown("Plymouth");
firstHouse.setZipCode("A-923754");
firstHouse.setState("Small Britain");
firstHouse.setHouseFootprint(123);
firstHouse.setLandFieldSize(432);
House secondHouse = new House();
secondHouse.setStreet("Quark");
secondHouse.setNumber("893");
secondHouse.setNumberOfFloors(1);
secondHouse.setOwner(p);
secondHouse.setRelation(p);
secondHouse.setSomething(p);
secondHouse.setTown("Cardiff");
secondHouse.setZipCode("B-3478");
secondHouse.setState("Small Britain");
secondHouse.setHouseFootprint(947);
secondHouse.setLandFieldSize(1837);

p.addOwningNoRel(firstHouse);
p.addOwningNoRel(secondHouse);
Person stored = personService.save(getServiceContext(), p);
entityManager.clear();

// All will have 2 items not only OwningNoRel
Person fetched = personService.findById(getServiceContext(), stored.getId());

Collection<House> owningNoRel = fetched.getOwningNoRel();
assertEquals(2, owningNoRel.size());

// This is WRONG - should be 0
Collection<House> relatedNoRel = fetched.getRelatedNoRel();
assertEquals(2, relatedNoRel.size());

// This is WRONG - should be 0
Collection<House> otherNoRel = fetched.getOtherNoRel();
assertEquals(2, otherNoRel.size());
}

@Override
public void testDelete() throws Exception {
}
}
20 changes: 18 additions & 2 deletions sculptor-examples/DDDSample/src/test/resources/dbunit/TestData.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,22 @@
<RTCARRIERMOVEMENT ID="13" CARRIERMOVEMENTID="CAR_021" FRM="1" T="7"/>
<!-- USCHI - JPTKO -->
<RTCARRIERMOVEMENT ID="14" CARRIERMOVEMENTID="CAR_022" FRM="7" T="4"/>



<!-- Person test -->
<PERSON ID="101" FIRST="Jozef" SECONDNAME="Merkvicko" UUID="101" VERSION="0"/>
<PERSON ID="102" FIRST="Mahatutma" SECONDNAME="Gandhi" UUID="102" VERSION="0"/>
<PERSON ID="103" FIRST="Feromon" SECONDNAME="Smradoch" UUID="103" VERSION="0"/>
<PERSON ID="104" FIRST="Peterson" SECONDNAME="Gabrielson" UUID="104" VERSION="0"/>

<HOUSE ID="201" STREET="Pilgrim Street" NUMBER="88" TOWN="Newcastle" STATE="England" ZIPCODE="1233" LANDFIELDSIZE="123" HOUSEFOOTPRINT="643" NUMBEROFFLOORS="2"
PERSON="101" OWNER="104" RELATION="103" SOMETHING="102" UUID="201" VERSION="0"/>

<HOUSE ID="202" STREET="Kucma" NUMBER="98" TOWN="Nove Zamky" STATE="Slovakia" ZIPCODE="923 23" LANDFIELDSIZE="2393" HOUSEFOOTPRINT="172" NUMBEROFFLOORS="1"
PERSON="101" OWNER="104" RELATION="103" SOMETHING="102" UUID="202" VERSION="0"/>

<HOUSE ID="203" STREET="Utma" NUMBER="1254" TOWN="Levice" STATE="Spain" ZIPCODE="A-1132" LANDFIELDSIZE="972" HOUSEFOOTPRINT="129" NUMBEROFFLOORS="1"
PERSON="101" OWNER="104" RELATION="103" SOMETHING="102" UUID="203" VERSION="0"/>

<HOUSE ID="204" STREET="Runisaka Street" NUMBER="323/2" TOWN="Brussels" STATE="Belgium" ZIPCODE="388" LANDFIELDSIZE="7282" HOUSEFOOTPRINT="1958" NUMBEROFFLOORS="3"
PERSON="102" OWNER="104" RELATION="103" SOMETHING="102" UUID="204" VERSION="0"/>
</dataset>

0 comments on commit 5037efa

Please sign in to comment.