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移动到一个单独的表中成为一个实体,但这将意味着迁移任务。

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

谢谢

解决方法

您只需要在SqlRole中将Embeddable注册为persistence.xml(或用@Embeddable进行注释。我也不确定@Target是否为 > 目录> > 的>设置的允许嵌入的字段“的允许的范围内,可以将字段类型设置为SqlRole

为重点。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...