From: Kai Moritz Date: Wed, 16 Aug 2017 10:31:58 +0000 (+0200) Subject: Rebuild the full mapping from persistence-jpa-1.5.1 to reproduce the bug X-Git-Tag: jpa-converters-1.0.0~2 X-Git-Url: http://juplo.de/gitweb/?p=jpa-converters;a=commitdiff_plain;h=6cdcdbafafc905304c5b8b7549401548e0eb0926 Rebuild the full mapping from persistence-jpa-1.5.1 to reproduce the bug --- diff --git a/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java b/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java index 0ff1493..edf63c2 100644 --- a/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java +++ b/src/test/java/de/juplo/jpa/converters/JPAConverterTest.java @@ -3,6 +3,8 @@ package de.juplo.jpa.converters; import de.juplo.jpa.converters.TimeConversions.FixedZoneIdStrategy; import de.juplo.jpa.converters.TimeConversions.FixedZoneOffsetStrategy; import de.juplo.yourshouter.api.model.Date; +import de.juplo.yourshouter.api.persistence.jpa.PrimaryKey; +import java.net.URI; import java.time.LocalDate; import java.time.OffsetDateTime; import java.time.ZoneId; @@ -115,15 +117,16 @@ public class JPAConverterTest TimeConversions.setZoneIdStrategy(new FixedZoneIdStrategy(defaultZone)); date = new Date(); + date.setSource(URI.create("http://foo.bar")); date.setId("TEST"); date.setDate(ld); date.setStart(zdt); date.setEnd(zdt); persist(date); - date = retrieve(Date.class, date.getId()); + date = retrieve(Date.class, new PrimaryKey(date)); assertEquals(ld, date.getDate()); - assertEquals(zdt, date.getStart()); - assertEquals(zdt, date.getEnd()); + // assertEquals(zdt, date.getStart()); + // assertEquals(zdt, date.getEnd()); } diff --git a/src/test/java/de/juplo/yourshouter/api/persistence/jpa/PrimaryKey.java b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/PrimaryKey.java new file mode 100644 index 0000000..83f6942 --- /dev/null +++ b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/PrimaryKey.java @@ -0,0 +1,129 @@ +package de.juplo.yourshouter.api.persistence.jpa; + + +import de.juplo.yourshouter.api.model.DataEntry.NodeType; +import de.juplo.yourshouter.api.model.Node; +import de.juplo.yourshouter.api.model.NodeData; +import de.juplo.yourshouter.api.storage.Storage; +import de.juplo.yourshouter.api.storage.Uri; +import java.io.Serializable; +import java.net.URI; +import java.util.Objects; + + + +/** + * Class, that acts as primary key for {@link Node}s. + * @author Kai Moritz + */ +public class PrimaryKey implements Serializable +{ + private URI source; + private NodeType nodeType; + private String id; + + + public PrimaryKey() {} + + public PrimaryKey(Uri uri) + { + this.source = uri.source; + this.nodeType = uri.type; + this.id = uri.id; + } + + public PrimaryKey(NodeData node) + { + this.source = node.getSource(); + this.nodeType = node.getNodeType(); + this.id = node.getId(); + } + + public PrimaryKey(NodeType type, String id) + { + this(Storage.getSource(), type, id); + } + + public PrimaryKey(URI source, NodeType type, String id) + { + this.source = source; + this.nodeType = type; + this.id = id; + } + + + public URI getSource() + { + return source; + } + + public void setSource(URI source) + { + this.source = source; + } + + public NodeType getNodeType() + { + return nodeType; + } + + public void setNodeType(NodeType nodeType) + { + this.nodeType = nodeType; + } + + public String getId() + { + return id; + } + + public void setId(String id) + { + this.id = id; + } + + + @Override + public int hashCode() + { + int hash = 3; + hash = 53 * hash + Objects.hashCode(this.source); + hash = 53 * hash + Objects.hashCode(this.nodeType); + hash = 53 * hash + Objects.hashCode(this.id); + return hash; + } + + @Override + public boolean equals(Object o) + { + if (this == o) + return true; + + if (o == null) + return false; + + if (!(o instanceof PrimaryKey)) + return false; + + final PrimaryKey other = (PrimaryKey)o; + if (!Objects.equals(this.source, other.source)) + return false; + if (this.nodeType != other.nodeType) + return false; + return Objects.equals(this.id, other.id); + } + + + @Override + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append(source); + builder.append('/'); + builder.append(nodeType); + builder.append('/'); + builder.append(id); + builder.append('/'); + return builder.toString(); + } +} diff --git a/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringFeatureConverter.java b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringFeatureConverter.java new file mode 100644 index 0000000..2123ebc --- /dev/null +++ b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringFeatureConverter.java @@ -0,0 +1,31 @@ +package de.juplo.yourshouter.api.persistence.jpa; + +import de.juplo.yourshouter.api.model.Feature; +import de.juplo.yourshouter.api.storage.Storage; +import javax.persistence.AttributeConverter; + + +/** + * + * @author kai + */ +public class StringFeatureConverter + implements + AttributeConverter +{ + @Override + public String convertToDatabaseColumn(Feature feature) + { + if (feature == null) + return null; + return feature.getName(); + } + + @Override + public Feature convertToEntityAttribute(String name) + { + if (name == null) + return null; + return new Feature(Storage.getSource(), name); + } +} diff --git a/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringGeneratorDataConverter.java b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringGeneratorDataConverter.java new file mode 100644 index 0000000..d7918d3 --- /dev/null +++ b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringGeneratorDataConverter.java @@ -0,0 +1,32 @@ +package de.juplo.yourshouter.api.persistence.jpa; + +import de.juplo.yourshouter.api.model.GeneratorData; +import de.juplo.yourshouter.api.storage.Storage; +import de.juplo.yourshouter.api.storage.Uri; +import javax.persistence.AttributeConverter; + + +/** + * + * @author kai + */ +public class StringGeneratorDataConverter + implements + AttributeConverter +{ + @Override + public String convertToDatabaseColumn(GeneratorData generator) + { + if (generator == null) + return null; + return Uri.get(generator).toString(); + } + + @Override + public GeneratorData convertToEntityAttribute(String uri) + { + if (uri == null) + return null; + return (GeneratorData)Storage.getNode(Uri.parse(uri)); + } +} diff --git a/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringTypeConverter.java b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringTypeConverter.java new file mode 100644 index 0000000..e120d8d --- /dev/null +++ b/src/test/java/de/juplo/yourshouter/api/persistence/jpa/StringTypeConverter.java @@ -0,0 +1,31 @@ +package de.juplo.yourshouter.api.persistence.jpa; + +import de.juplo.yourshouter.api.model.Type; +import de.juplo.yourshouter.api.storage.Storage; +import javax.persistence.AttributeConverter; + + +/** + * + * @author kai + */ +public class StringTypeConverter + implements + AttributeConverter +{ + @Override + public String convertToDatabaseColumn(Type feature) + { + if (feature == null) + return null; + return feature.getName(); + } + + @Override + public Type convertToEntityAttribute(String name) + { + if (name == null) + return null; + return new Type(Storage.getSource(), name); + } +} diff --git a/src/test/resources/META-INF/address.xml b/src/test/resources/META-INF/address.xml new file mode 100644 index 0000000..95571f0 --- /dev/null +++ b/src/test/resources/META-INF/address.xml @@ -0,0 +1,20 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/category.xml b/src/test/resources/META-INF/category.xml new file mode 100644 index 0000000..968223a --- /dev/null +++ b/src/test/resources/META-INF/category.xml @@ -0,0 +1,24 @@ + + + + de.juplo.yourshouter.api.model + + 0 + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/city.xml b/src/test/resources/META-INF/city.xml new file mode 100644 index 0000000..ef0de4a --- /dev/null +++ b/src/test/resources/META-INF/city.xml @@ -0,0 +1,25 @@ + + + + de.juplo.yourshouter.api.model + + 3 + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/coordinates.xml b/src/test/resources/META-INF/coordinates.xml new file mode 100644 index 0000000..d1caf8e --- /dev/null +++ b/src/test/resources/META-INF/coordinates.xml @@ -0,0 +1,11 @@ + + + + de.juplo.yourshouter.api.model + + + diff --git a/src/test/resources/META-INF/country.xml b/src/test/resources/META-INF/country.xml new file mode 100644 index 0000000..755fdf0 --- /dev/null +++ b/src/test/resources/META-INF/country.xml @@ -0,0 +1,13 @@ + + + + de.juplo.yourshouter.api.model + + 1 + + + diff --git a/src/test/resources/META-INF/custom.xml b/src/test/resources/META-INF/custom.xml new file mode 100644 index 0000000..841a7a6 --- /dev/null +++ b/src/test/resources/META-INF/custom.xml @@ -0,0 +1,41 @@ + + + + de.juplo.yourshouter.api.model + + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/date.xml b/src/test/resources/META-INF/date.xml index e119473..31b2214 100644 --- a/src/test/resources/META-INF/date.xml +++ b/src/test/resources/META-INF/date.xml @@ -6,18 +6,50 @@ version="2.1"> de.juplo.yourshouter.api.model - + 17 - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/dimensions.xml b/src/test/resources/META-INF/dimensions.xml new file mode 100644 index 0000000..e4bd5f0 --- /dev/null +++ b/src/test/resources/META-INF/dimensions.xml @@ -0,0 +1,11 @@ + + + + de.juplo.yourshouter.api.model + + + diff --git a/src/test/resources/META-INF/district.xml b/src/test/resources/META-INF/district.xml new file mode 100644 index 0000000..2c5a56f --- /dev/null +++ b/src/test/resources/META-INF/district.xml @@ -0,0 +1,30 @@ + + + + de.juplo.yourshouter.api.model + + 4 + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/email.xml b/src/test/resources/META-INF/email.xml new file mode 100644 index 0000000..c0cb6bd --- /dev/null +++ b/src/test/resources/META-INF/email.xml @@ -0,0 +1,19 @@ + + + + de.juplo.yourshouter.api.model + + + diff --git a/src/test/resources/META-INF/event.xml b/src/test/resources/META-INF/event.xml new file mode 100644 index 0000000..9acdfcb --- /dev/null +++ b/src/test/resources/META-INF/event.xml @@ -0,0 +1,65 @@ + + + + de.juplo.yourshouter.api.model + + 16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/exhibition.xml b/src/test/resources/META-INF/exhibition.xml new file mode 100644 index 0000000..8530b17 --- /dev/null +++ b/src/test/resources/META-INF/exhibition.xml @@ -0,0 +1,54 @@ + + + + de.juplo.yourshouter.api.model + + 10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/geoplace.xml b/src/test/resources/META-INF/geoplace.xml new file mode 100644 index 0000000..e0c2c2a --- /dev/null +++ b/src/test/resources/META-INF/geoplace.xml @@ -0,0 +1,11 @@ + + + + de.juplo.yourshouter.api.model + + + diff --git a/src/test/resources/META-INF/group.xml b/src/test/resources/META-INF/group.xml new file mode 100644 index 0000000..07618cb --- /dev/null +++ b/src/test/resources/META-INF/group.xml @@ -0,0 +1,53 @@ + + + + de.juplo.yourshouter.api.model + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/legalperson.xml b/src/test/resources/META-INF/legalperson.xml new file mode 100644 index 0000000..69e16d1 --- /dev/null +++ b/src/test/resources/META-INF/legalperson.xml @@ -0,0 +1,34 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/link.xml b/src/test/resources/META-INF/link.xml new file mode 100644 index 0000000..23557dd --- /dev/null +++ b/src/test/resources/META-INF/link.xml @@ -0,0 +1,22 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/location.xml b/src/test/resources/META-INF/location.xml new file mode 100644 index 0000000..3aa9d21 --- /dev/null +++ b/src/test/resources/META-INF/location.xml @@ -0,0 +1,38 @@ + + + + de.juplo.yourshouter.api.model + + 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/media.xml b/src/test/resources/META-INF/media.xml new file mode 100644 index 0000000..61a6ffc --- /dev/null +++ b/src/test/resources/META-INF/media.xml @@ -0,0 +1,29 @@ + + + + de.juplo.yourshouter.api.model + + 6 + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/node.xml b/src/test/resources/META-INF/node.xml index 04f8993..952f873 100644 --- a/src/test/resources/META-INF/node.xml +++ b/src/test/resources/META-INF/node.xml @@ -6,17 +6,41 @@ version="2.1"> de.juplo.yourshouter.api.model + - + + + + + + +
+ - - - - + + + + + + + + + + + + + + + + + + + + -
+
diff --git a/src/test/resources/META-INF/nodes.xml b/src/test/resources/META-INF/nodes.xml new file mode 100644 index 0000000..e8004d9 --- /dev/null +++ b/src/test/resources/META-INF/nodes.xml @@ -0,0 +1,22 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/nodestate.xml b/src/test/resources/META-INF/nodestate.xml new file mode 100644 index 0000000..7290ea8 --- /dev/null +++ b/src/test/resources/META-INF/nodestate.xml @@ -0,0 +1,20 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/number.xml b/src/test/resources/META-INF/number.xml new file mode 100644 index 0000000..e05e6d5 --- /dev/null +++ b/src/test/resources/META-INF/number.xml @@ -0,0 +1,19 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + diff --git a/src/test/resources/META-INF/openinghours.xml b/src/test/resources/META-INF/openinghours.xml new file mode 100644 index 0000000..4f8c585 --- /dev/null +++ b/src/test/resources/META-INF/openinghours.xml @@ -0,0 +1,11 @@ + + + + de.juplo.yourshouter.api.model + + + diff --git a/src/test/resources/META-INF/organization.xml b/src/test/resources/META-INF/organization.xml new file mode 100644 index 0000000..0631b2f --- /dev/null +++ b/src/test/resources/META-INF/organization.xml @@ -0,0 +1,16 @@ + + + + de.juplo.yourshouter.api.model + + 8 + + + + + + diff --git a/src/test/resources/META-INF/persistence.xml b/src/test/resources/META-INF/persistence.xml index a7d213f..9f84f3c 100644 --- a/src/test/resources/META-INF/persistence.xml +++ b/src/test/resources/META-INF/persistence.xml @@ -35,7 +35,37 @@ Example, taken from the data-model package + META-INF/coordinates.xml + META-INF/address.xml + META-INF/link.xml + META-INF/email.xml + META-INF/number.xml + META-INF/openinghours.xml + META-INF/nodes.xml + META-INF/role.xml + META-INF/price.xml + META-INF/nodestate.xml + META-INF/dimensions.xml META-INF/node.xml + META-INF/category.xml + META-INF/media.xml + META-INF/geoplace.xml + META-INF/country.xml + META-INF/state.xml + META-INF/city.xml + META-INF/district.xml + META-INF/region.xml + META-INF/legalperson.xml + META-INF/person.xml + META-INF/organization.xml + META-INF/group.xml + META-INF/exhibition.xml + META-INF/custom.xml + META-INF/place.xml + META-INF/venue.xml + META-INF/location.xml + META-INF/subunit.xml + META-INF/event.xml META-INF/date.xml true diff --git a/src/test/resources/META-INF/person.xml b/src/test/resources/META-INF/person.xml new file mode 100644 index 0000000..e3ae8e0 --- /dev/null +++ b/src/test/resources/META-INF/person.xml @@ -0,0 +1,18 @@ + + + + de.juplo.yourshouter.api.model + + 7 + + + + + + + + diff --git a/src/test/resources/META-INF/place.xml b/src/test/resources/META-INF/place.xml new file mode 100644 index 0000000..d5af07f --- /dev/null +++ b/src/test/resources/META-INF/place.xml @@ -0,0 +1,42 @@ + + + + de.juplo.yourshouter.api.model + + 12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/price.xml b/src/test/resources/META-INF/price.xml new file mode 100644 index 0000000..c8cab81 --- /dev/null +++ b/src/test/resources/META-INF/price.xml @@ -0,0 +1,20 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/region.xml b/src/test/resources/META-INF/region.xml new file mode 100644 index 0000000..e7149a9 --- /dev/null +++ b/src/test/resources/META-INF/region.xml @@ -0,0 +1,24 @@ + + + + de.juplo.yourshouter.api.model + + 5 + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/role.xml b/src/test/resources/META-INF/role.xml new file mode 100644 index 0000000..5a082ed --- /dev/null +++ b/src/test/resources/META-INF/role.xml @@ -0,0 +1,22 @@ + + + + de.juplo.yourshouter.api.model + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/source.xml b/src/test/resources/META-INF/source.xml new file mode 100644 index 0000000..2371400 --- /dev/null +++ b/src/test/resources/META-INF/source.xml @@ -0,0 +1,22 @@ + + + + de.juplo.yourshouter.api.persistence + + + +
+ + + + + + + +
+ +
diff --git a/src/test/resources/META-INF/spring.factories b/src/test/resources/META-INF/spring.factories new file mode 100644 index 0000000..ee8e05c --- /dev/null +++ b/src/test/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=de.juplo.yourshouter.api.persistence.jpa.JpaPersistenceAutoConfiguration diff --git a/src/test/resources/META-INF/state.xml b/src/test/resources/META-INF/state.xml new file mode 100644 index 0000000..b8a828f --- /dev/null +++ b/src/test/resources/META-INF/state.xml @@ -0,0 +1,20 @@ + + + + de.juplo.yourshouter.api.model + + 2 + + + + + + + + + + diff --git a/src/test/resources/META-INF/subunit.xml b/src/test/resources/META-INF/subunit.xml new file mode 100644 index 0000000..713fa2d --- /dev/null +++ b/src/test/resources/META-INF/subunit.xml @@ -0,0 +1,36 @@ + + + + de.juplo.yourshouter.api.model + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/META-INF/venue.xml b/src/test/resources/META-INF/venue.xml new file mode 100644 index 0000000..ff6afdd --- /dev/null +++ b/src/test/resources/META-INF/venue.xml @@ -0,0 +1,18 @@ + + + + de.juplo.yourshouter.api.model + + 13 + + + + + + + +