Как использовать последовательности и тип данных Point в Hibernate 5.4 и MariaDB 10 - PullRequest
0 голосов
/ 21 марта 2020

Мой проект настроен на 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;
...