问题描述
我正在尝试在查询中添加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 (将#修改为@)