QueryDsl Embedded未映射

问题描述

我正在尝试在查询中添加where条件,以检查列表中的任何值是否在另一个列表中。

jpaQuery.where(adminDsl.role.profiles.any().`in`(getUserRole().profiles))

但是我收到“ QuerySyntaxException:角色未映射”。我认为是因为Role嵌入在Administrator中(有关代码,请参见下文)。

[INFO] GCLOUD: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Role is not mapped [select sqlAdministrator
[INFO] GCLOUD: from com.wizy.emm.domain.sql.SqlAdministrator sqlAdministrator
[INFO] GCLOUD:   left join sqlAdministrator.federation
[INFO] GCLOUD: where sqlAdministrator.federation.name = ?1 and exists (select 1
[INFO] GCLOUD: from Role sqlAdministrator_role_530393770 --This line is the issue 
[INFO] GCLOUD:   inner join sqlAdministrator_role_530393770.profiles as sqlAdministrator_role_profiles_0
[INFO] GCLOUD: where sqlAdministrator_role_530393770 = sqlAdministrator.role and sqlAdministrator_role_profiles_0 = ?2)]
@Entity
@Table(uniqueConstraints = [UniqueConstraint(columnNames = ["email","federation_id"])])
class SqlAdministrator internal constructor(
        federation: SqlCustomer,override var firstName: String,override var lastName: String,override var email: String,@Embedded
        @Column(nullable = false)
        @Target(SqlRole::class)
        override var role: Role
): Administrator

interface Administrator
    : ModelEntity<UUID> {
    var email: String
    var firstName: String
    var lastName: String
    var role: Role
}
@GenerateDefaultConstructor
class SqlRole(
        @Column(nullable = false)
        @Enumerated(EnumType.STRING)
        override val type: RoleType,profiles: Set<Policy> = setOf(),endpoints: Set<EndpointAction> = setOf(),@Enumerated(EnumType.STRING)
        override val restrictionType: RestrictionType = RestrictionType.NONE
): Role

interface Role {
    val type: RoleType
    var profiles: Set<Policy>
    var endpoints: Set<EndpointAction>
    val restrictionType: RestrictionType
}

解决方案可能是将Role移动到一个单独的表中成为一个实体,但这将意味着迁移任务。

是否存在没有迁移任务的解决方案?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)