Неверный перевод Spring @Query jpql на нативный sql при использовании встроенного поля - PullRequest
1 голос
/ 09 февраля 2020

Учитывая следующую иерархию классов, я пытаюсь запросить CharacterDisposition, которому принадлежит зависимость от моего объекта Charakter.

@Entity
@Table(name = "CHARACTER_DISPOSITION")
class CharacterDisposition{
    @OneToMany
    List<CharacterSlot> slots;
}

@Entity
@Table(name = "CHARACTER_SLOT")
class CharacterSlot{
    @Embedded
    SceneCharacter sceneCharacter;
}

@Embeddable
class SceneCharacter{
    @ManyToOne
    Charakter character;
}

Я использую следующий запрос jpql в моем интерфейсе репозитория spring,

@Query("SELECT cd "
        + "FROM CharacterDisposition cd "
        + "JOIN CharacterSlot cs "
        + "WHERE cs.sceneCharacter.character = :character")
List<CharacterDisposition> findCharacterDispositionWithCharacterDependency(Charakter character);

Вышеуказанный вызов создает следующий собственный sql оператор

select 
  characterd0_.id as id1_24_, characterd0_1_.scene_id as scene_id2_24_ 
from character_disposition characterd0_ 
    inner join character_slot characterd0_1_ on characterd0_.id=characterd0_1_.id 
    inner join character_slot characters1_ on where characters1_.character_id=?

, который является ошибочным из-за ошибочного ключевого слова on, добавленного перед последним оператором where. Я думаю, что это может быть связано с тем, что мой SceneCharacter является @ Embedded.

Я использую весеннюю загрузку 2.2.1.RELEASE, hibernate и mysql 5 диалект.

1 Ответ

0 голосов
/ 14 февраля 2020

Попробуйте со следующим -

@Query("SELECT cd "
        + "FROM CharacterDisposition cd "
        + "JOIN cd.slots cs "
        + "WHERE cs.character = :character")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...