diff --git a/class.png b/class.png index c3fff7f..8bc12fb 100644 --- a/class.png +++ b/class.png Binary files differ diff --git a/class.pu b/class.pu index 16bbd96..c841f90 100644 --- a/class.pu +++ b/class.pu @@ -2,8 +2,7 @@ database "h2" as db { entity city { - + id : BIGINT - - citycode : VARCHAR 255 + + citycode : VARCHAR 255 cityname : VARCHAR 255 folder : VARCHAR 255 lng : VARCHAR 255 @@ -21,9 +20,8 @@ } entity task { - + id : BIGINT - - citycode : VARCHAR 255 - - meshcode : VARCHAR 255 + + citycode : VARCHAR 255 + + meshcode : VARCHAR 255 version :VARCHAR 255 path : VARCHAR 255 line : VARCHAR 255 @@ -88,7 +86,6 @@ class City <> { site : static String - + id : Long + citycode : String - cityname : String - folder : String @@ -103,16 +100,17 @@ + toString() : String } City .. city +City . CityPK : citycode -class Point { - - lng : Double - - lat : Double - + toString() : String +class CityPK { + citycode : String + + equals(Object) : boolean + + hashCode() : int } -City .> Point interface CityRepository <> { findByCitycode(String) : City + deleteByCitycode(String) : List } CityRepository <|-- City diff --git a/src/main/java/osm/surveyor/task/StringTableGenerator.java b/src/main/java/osm/surveyor/task/StringTableGenerator.java new file mode 100644 index 0000000..9f66385 --- /dev/null +++ b/src/main/java/osm/surveyor/task/StringTableGenerator.java @@ -0,0 +1,28 @@ +package osm.surveyor.task; + +import java.io.Serializable; +import java.util.Properties; + +import org.hibernate.MappingException; +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.id.enhanced.TableGenerator; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.type.BigDecimalType; +import org.hibernate.type.Type; + +/** + * TableGenerator (文字列カラム対応) + */ +public class StringTableGenerator extends TableGenerator { + + @Override + public void configure(Type type, Properties params, ServiceRegistry serviceRegistry) throws MappingException { + super.configure(new BigDecimalType() , params, serviceRegistry); + } + + @Override + public Serializable generate(SharedSessionContractImplementor session, Object obj) { + return super.generate(session, obj).toString(); + } + +} \ No newline at end of file diff --git a/src/main/java/osm/surveyor/task/city/CityController.java b/src/main/java/osm/surveyor/task/city/CityController.java index 3e411fd..21f68c4 100644 --- a/src/main/java/osm/surveyor/task/city/CityController.java +++ b/src/main/java/osm/surveyor/task/city/CityController.java @@ -33,19 +33,20 @@ if (result.hasErrors()) { return "form"; } + repository.save(city); return "redirect:/city"; } - @GetMapping("/city/edit/{id}") - public String editCity(@PathVariable Long id, Model model) { - model.addAttribute("city", repository.findById(id)); + @GetMapping("/city/edit/{citycode}") + public String editCity(@PathVariable String citycode, Model model) { + model.addAttribute("city", repository.findByCitycode(citycode)); return "form"; } - @GetMapping("/city/delete/{id}") - public String deleteCity(@PathVariable Long id) { - repository.deleteById(id); + @GetMapping("/city/delete/{citycode}") + public String deleteCity(@PathVariable String citycode) { + repository.deleteByCitycode(citycode); return "redirect:/city"; } } diff --git a/src/main/java/osm/surveyor/task/city/CityRepository.java b/src/main/java/osm/surveyor/task/city/CityRepository.java index 58fb1ba..c3bfc90 100644 --- a/src/main/java/osm/surveyor/task/city/CityRepository.java +++ b/src/main/java/osm/surveyor/task/city/CityRepository.java @@ -1,10 +1,17 @@ package osm.surveyor.task.city; +import java.util.List; + +import javax.transaction.Transactional; + import org.springframework.data.jpa.repository.JpaRepository; import osm.surveyor.task.city.model.City; -public interface CityRepository extends JpaRepository { +public interface CityRepository extends JpaRepository { City findByCitycode(String citycode); + + @Transactional + List deleteByCitycode(String citycode); } diff --git a/src/main/java/osm/surveyor/task/city/DataLoader.java b/src/main/java/osm/surveyor/task/city/DataLoader.java index ae2fce8..c205002 100644 --- a/src/main/java/osm/surveyor/task/city/DataLoader.java +++ b/src/main/java/osm/surveyor/task/city/DataLoader.java @@ -80,16 +80,8 @@ } } } - - // TODO: } } - - // TODO: - System.out.println("["+ path + "] " + geojson.toString()); } - - // TODO: - } } \ No newline at end of file diff --git a/src/main/java/osm/surveyor/task/city/model/City.java b/src/main/java/osm/surveyor/task/city/model/City.java index 5240d9b..da4d11a 100644 --- a/src/main/java/osm/surveyor/task/city/model/City.java +++ b/src/main/java/osm/surveyor/task/city/model/City.java @@ -1,10 +1,11 @@ package osm.surveyor.task.city.model; import java.math.BigDecimal; + import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.Table; import javax.validation.constraints.NotBlank; import lombok.Getter; @@ -14,14 +15,13 @@ @Getter @Setter @Entity +@Table(name = "city") +@IdClass(CityPK.class) public class City { + private static String site; // 全体に適用する @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @NotBlank private String citycode; @NotBlank @@ -44,10 +44,6 @@ return City.site; } - public void setCitycode(String citycode) { - this.citycode = citycode; - } - public void setLng(String str) { this.lng = str; } diff --git a/src/main/java/osm/surveyor/task/city/model/CityPK.java b/src/main/java/osm/surveyor/task/city/model/CityPK.java new file mode 100644 index 0000000..d432954 --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/model/CityPK.java @@ -0,0 +1,33 @@ +package osm.surveyor.task.city.model; + +import java.io.Serializable; + +import javax.persistence.Embeddable; + +import lombok.Getter; +import lombok.Setter; + +@SuppressWarnings("serial") +@Getter +@Setter +@Embeddable +public class CityPK implements Serializable { + private String citycode; + + public CityPK() { + } + + public boolean equals(Object obj) { + if (obj instanceof CityPK) { + if (((CityPK)obj).getCitycode().equals(this.citycode)) { + return true; + } + } + return false; + } + + public int hashCode() { + String s = this.citycode; + return s.hashCode(); + } +} diff --git a/src/main/java/osm/surveyor/task/city/model/KeyCitycode.java b/src/main/java/osm/surveyor/task/city/model/KeyCitycode.java new file mode 100644 index 0000000..e8fca2c --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/model/KeyCitycode.java @@ -0,0 +1,13 @@ +package osm.surveyor.task.city.model; + +import java.io.Serializable; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class KeyCitycode implements Serializable { + + private String citycode; + +} diff --git a/src/main/java/osm/surveyor/task/city/model/Task.java b/src/main/java/osm/surveyor/task/city/model/Task.java index 6ad8554..519c49f 100644 --- a/src/main/java/osm/surveyor/task/city/model/Task.java +++ b/src/main/java/osm/surveyor/task/city/model/Task.java @@ -1,30 +1,26 @@ package osm.surveyor.task.city.model; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.IdClass; import javax.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; import osm.surveyor.task.util.JsonGeometryLine; -import osm.surveyor.task.util.Point; @Getter @Setter @Entity +@IdClass(TaskPK.class) public class Task { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @NotBlank - private String citycode; + @Id + private String citycode; // TaskPK.citycode - @NotBlank - private String meshcode; - + @Id + private String meshcode; // TaskPK.meshcode + @NotBlank private String version; diff --git a/src/main/java/osm/surveyor/task/city/model/TaskPK.java b/src/main/java/osm/surveyor/task/city/model/TaskPK.java new file mode 100644 index 0000000..edd32cd --- /dev/null +++ b/src/main/java/osm/surveyor/task/city/model/TaskPK.java @@ -0,0 +1,36 @@ +package osm.surveyor.task.city.model; + +import java.io.Serializable; + +import javax.persistence.Embeddable; + +import lombok.Getter; +import lombok.Setter; + +@SuppressWarnings("serial") +@Getter +@Setter +@Embeddable +public class TaskPK implements Serializable { + private String citycode; + private String meshcode; + + public TaskPK() { + } + + public boolean equals(Object obj) { + if (obj instanceof TaskPK) { + if (((TaskPK)obj).getCitycode().equals(this.citycode)) { + if (((TaskPK)obj).getMeshcode().equals(this.meshcode)) { + return true; + } + } + } + return false; + } + + public int hashCode() { + String s = this.citycode + this.meshcode; + return s.hashCode(); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 57be68a..d09573d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,6 +8,8 @@ # JPA spring.h2.console.enabled=true +spring.h2.console.path=/h2-console +spring.h2.console.settings.web-allow-others=true spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update diff --git a/src/main/resources/templates/cities.html b/src/main/resources/templates/cities.html index 5007bae..d01b745 100644 --- a/src/main/resources/templates/cities.html +++ b/src/main/resources/templates/cities.html @@ -51,7 +51,6 @@ - @@ -61,7 +60,6 @@ - @@ -72,12 +70,12 @@ タスク - + 編集 - + 削除 diff --git a/src/main/resources/templates/form.html b/src/main/resources/templates/form.html index 756e682..0f27483 100644 --- a/src/main/resources/templates/form.html +++ b/src/main/resources/templates/form.html @@ -31,8 +31,6 @@
- -
# citycode cityname folder