Мой проект настроен на Java с Spring-Boot (Hibernate 5.4) и MariaDB в версии 10. Требуется хранить данные геометрии (POINT) и использовать последовательности для генерации первичного идентификатора.
Я нашел этот ответ: Отображение геометрии MariaDB. Укажите пользовательский тип Hibernate , но на самом деле я удивлен, что это довольно распространенное и простое требование (использование POINT и Sequence) не может быть решено стандартными средствами (а это почти 2 года). старый).
Я пытался использовать диалект для MySQL org.hibernate.spatial.dialect.mysql.MySQL8SpatialDialect
, но этот диалект не знает sequences
.
Если я использую диалект org.hibernate.dialect.MariaDB103Dialect
, тогда SQL Тип POINT
нельзя сериализовать при insert ...
Нужно ли мне обязательно писать свой собственный преобразователь типов данных для MariaDB, чтобы можно было использовать типы данных sequences
и Geometry / POINT
SQL?
Ниже приведена краткая выдержка из моего объекта Entity. Этот код использует тип Point Java из org.locationtech.jts.geom
, который является частью Hibernate 5.4 (добавлены зависимости gradle org.hibernate:hibernate-spatial
и org.mariadb.jdbc:mariadb-java-client
).
@Entity
@Table(name = "partners")
public class Partner implements AddressIF {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "partner_generator")
@SequenceGenerator(name = "partner_generator", sequenceName = "partner_seq", allocationSize = 1)
@Column(name = "id", updatable = false, nullable = false)
private long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String street;
@Column(nullable = false)
private String number;
@Column(nullable = false)
private String city;
@Column(nullable = false)
private String zip;
@Column(nullable = false, length = 2)
private String country;
@Column(name = "location", columnDefinition = "POINT")
private Point location;