Возникла проблема с ST_D, когда модели содержат абстрактный класс - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь выполнить запрос ST_DWithin к объекту, который расширяет абстрактный класс.

Я проверил запрос по более обычной модели, и он отлично работает.

Объект, к которому я хочу выполнить запрос.

@Entity
actual data class SecRoleCheeseBuyer(
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "sec_role_id")
        actual override val secRole: SecRole,

        actual var latitude: Double? = null,

        actual var longitude: Double? = null,

        val point: Point
) : SecRoleDetail() {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "sec_user_id")
    actual override var secUser: SecUser? = null

    actual override fun toDtoMin() = this.createDtoMin(detail = this.secRole.secRoleName.name)

    actual override fun toDto(): SecRoleCheeseBuyerDto {
        val dto = SecRoleCheeseBuyerDto(
                secRole = this.secRole.toDtoMin(),
                secUser = this.secUser?.toDtoMin()!!
        )
        this.addSuperDataToDTO(dto)
        return dto
    }
}

Абстрактный класс

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
actual abstract class SecRoleDetail : RestModel() {
    actual abstract val secRole: SecRole
    actual abstract var secUser: SecUser?
}

Запрос

interface SecRoleDetailCheeseBuyerRepository : JpaRepository<SecRoleCheeseBuyer, Long>{

    @Query(value = """
            SELECT *
            FROM sec_role_Cheese_buyer
            WHERE ST_DWithin(point, cast(ST_MakePoint(:longitude,:latitude) as geography), :distance)
    """, nativeQuery = true) // distance is meters
    fun fetchByDistance(
            @Param("distance") distance: Double,
            @Param("longitude") longitude: Double,
            @Param("latitude") latitude: Double
    ): List<SecRoleCheeseBuyer>
}

org.hibernate.exception.SQLGrammarException выбрасывается каждый раз, у меня есть уродливый обходной путь, но я хотел бы знать, что я делаю неправильно.

...