当前位置: 首页 > 知识库问答 >
问题:

科特林:集合既没有泛型类型,也没有一个域。目标实体()

解河
2023-03-14

我有一个枚举类角色类型

public enum RoleType {
    SYSTEM_ADMIN, PROJECT_ADMIN, USER;
}

在我的User实体类中,我有枚举集合的以下映射。这是Java代码:

@JsonProperty
@ElementCollection
@Enumerated(EnumType.STRING)
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
private Set<RoleType> roles;

我将这个用户实体类转换为Kotlin,下面是代码:

@JsonProperty
@Enumerated(EnumType.STRING)
@ElementCollection
@CollectionTable(name = "user_role", joinColumns = arrayOf(JoinColumn(name = "user_id")))
var roles: kotlin.collections.Set<RoleType>? = null

转换后,hibernate抛出以下异常:

Collection has neither generic type or OneToMany.targetEntity() defined: com.a.b.model.User.roles

它以前在Java工作得很好。

我还尝试在@ElementCollection中添加target etClass,如下所示:

@ElementCollection(targetClass = RoleType::class)

但这也是另一个例外。

Fail to process type argument in a generic declaration. Member : com.a.b.model.User#roles Type: class sun.reflect.generics.reflectiveObjects.WildcardTypeImpl
ERROR [2017-05-27 04:46:33,123] org.hibernate.annotations.common.AssertionFailure: HCANN000002: An assertion failure occurred (this may indicate a bug in Hibernate)
! org.hibernate.annotations.common.AssertionFailure: Fail to process type argument in a generic declaration. Member : com.a.b.model.User#roles Type: class sun.reflect.generics.reflectiveObjects.WildcardTypeImpl

注意:如果我将角色的修饰符从var改为val,它可以工作,但我需要它是一个可变类型。我不理解字段的易变性如何在hibernate中产生问题。

注意:我使用的是Kotlin 1.1.2-2

共有1个答案

东方和煦
2023-03-14

你试过换衣服吗

var roles: Set<RoleType>? = null

var roles: MutableSet<RoleType>? = null

如果您查看Set的接口定义,您会看到它被定义为公共接口Set

<代码>设置

 类似资料:
  • 我在一般类型中迷失了很多个小时。我想简化代码,但我不能强制转换对象时,它的泛型类型。我如何解决这个问题或另一个简化的方法? 错误:

  • 我有一个Spring启动应用程序,它定义了: 写入kafka主题的REST控制器,STREAM_TOPIC_IN_QQQ 一个从STREAM_TOPIC_IN_QQQ(group pId="bar")和日志读取的KafkaListener 查看主题并记录的KStream,将其转换为另一种类型,然后将其写入STREAM_TOPIC_OUT_QQQ 另一个从STREAM_TOPIC_OUT_QQQ读取

  • 问题内容: 假设我有一个抽象类 我有一些特定的培训师,例如: 这些“训练者”中的每一个都有一套固定的技巧,他们可以训练动物去做,我想用枚举来做。所以我有一个接口: 在每个培训师中,我都有一个实现此接口的枚举。所以: 现在,在每个Trainer类中,我想要一个方法“ trainingComplete”,该方法以枚举之一作为输入并将其保存到集合中。所以 但是,我不想在每个特定的培训师中定义“完成”集,

  • 问题内容: 在解决了之前的问题的基础上,但又导致了另一个问题。如果协议/类类型存储在集合中,则取回并实例化它们会引发错误。下面是一个假设的例子。该范例基于“程序到接口而不是实现”,“程序到接口” 编辑 -我当前的解决方法是遍历集合,但是由于api必须知道各种实现,所以这当然是有限的。另一个限制是这些类型的子类(例如PersianCat,GermanShepherd)将不会调用其重写的函数,否则我将

  • 我正在尝试IntDef typedef将特定类型的参数限制为函数。但是当我使用Java使用IntDef时,它工作正常,但同时,它不适用于kotlin。以下是我的代码片段 - 在JAVA中- 在静态编程语言中- 在课堂上使用- 调用演示函数给我一个错误消息,说它必须是:< code>TransTypeJava之一。CASH,< code>TransTypeJava。通过传递< code>TransT