Проблема с JPA-запросом Postgressql

#postgresql #spring-boot #kotlin #spring-data-jpa

#postgresql #весенняя загрузка #kotlin #spring-data-jpa

Вопрос:

У меня есть следующий запрос, определенный в CrudRepository:

 interface RoundRepository : CrudRepository<Round, Long> {
     fun findByGameId(id: Long): Round?
     @Query("select r from Round r where r.game.id like ?1 order by r.createdAt desc")
     fun findLastByGameId(id: Long) : List<Round>
}
 

Объекты Game и Round определяются следующим образом:

 @Entity
class Game(
    @ManyToOne(optional = false)
    @JoinColumn(name = "firstplayer_id", referencedColumnName = "id")
    var firstPlayer: User,
    @ManyToOne(optional = false)
    @JoinColumn(name = "secondeplayer_id", referencedColumnName = "id")
    var secondPlayer: User,
    @Size(min = 6, max = 60)
    var gameName: String,
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    var id: Long = 0,
    @DateTimeFormat
    val createdAt: Date = Date.from(Instant.now())
) {
@OneToMany(mappedBy = "game")
lateinit var rounds: Collection<Round>
}


@Entity
@Table(name = "round")
class Round(
    @ManyToOne
    @JoinColumn(name="game_id", referencedColumnName = "id")
    var game: Game,
    var cancelled: Boolean = false,
    var ended: Boolean = false,
    var winner: Winner = Winner.FIRST_PLAYER,
    var stateFirstPlayer: Int = -1,
    var stateSecondPlayer: Int = -1,
    var moveIndexFirstPlayer: Int = -1,
    var moveIndexSecondPlayer: Int = -1,
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    var id: Long = 0,
    @DateTimeFormat
    val createdAt: Date = Date.from(Instant.now())
) {

@Transient
lateinit var firstPlayerMoves: Collection<Move>

@Transient
lateinit var secondPlayerMoves: Collection<Move>

@Transient
lateinit var firstPlayerPositions: PlanesPositions

@Transient
lateinit var secondPlayerPositions: PlanesPositions
}
 

При вызове метода следующим образом:

 var game: Game? = gamesRepository.findByGameName(gameName)
            ?: throw GameDoesNotExistException("A game with this name does not exist");
var rounds = roundRepository.findLastByGameId(game?.id!!)
 

Я получаю исключение: org.hibernate.exception.Исключение SQLGrammarException: не удалось извлечь результирующий набор
Внутреннее исключение из Postgres гласит: org.postgresql.util.Исключение PSQLException: ОШИБКА: оператор не существует: bigint ~~ bigint

Изначально в поле game_id в круглой таблице не было спецификации not null. Итак, я подумал, что это проблема. Теперь я исправил это, но я все еще получаю ту же ошибку. Кто-нибудь может помочь?

Комментарии:

1. Заменить r.game.id like ?1 на r.game.id = ?1 . Числовые значения не могут быть сопоставлены с шаблоном, как строка.

2. Большое спасибо. Это решило проблему.