使用嵌入式字段时,无效的Spring @Query jpql转换为本地sql

问题描述 投票:1回答:1

鉴于下面的类层次结构,我正在尝试查询对Charakter对象具有依赖性的CharacterDisposition。

@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;
}

我正在我的spring存储库界面中使用以下jpql查询,

@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=?

这是有问题的,因为在最终的“ where”语句之前添加了错误的“ on”关键字。我认为这可能与我的SceneCharacter被@Embedded有关。

我正在使用spring boot 2.2.1.RELEASE,hibernate和mysql 5的方言。

mysql spring hibernate spring-boot jpql
1个回答
0
投票

尝试以下操作-

@Query("SELECT cd "
        + "FROM CharacterDisposition cd "
        + "JOIN cd.slots cs "
        + "WHERE cs.character = :character")
© www.soinside.com 2019 - 2024. All rights reserved.