Я пытаюсь выполнить запрос 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 выбрасывается каждый раз, у меня есть уродливый обходной путь, но я хотел бы знать, что я делаю неправильно.