gpt4 book ai didi

java - Kotlin:集合既没有泛型类型也没有 OneToMany.targetEntity()

转载 作者:IT老高 更新时间:2023-10-28 13:32:05 29 4
gpt4 key购买 nike

我有一个枚举类RoleType

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;

我将这个 User 实体类转换为 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 中添加 targetClass,如下所示:

@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

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

注意:我使用的是 Kotlin 1.1.2-2 和 Hibernate 5.2 版本。

最佳答案

你有没有尝试过改变

var roles: Set<RoleType>? = null

var roles: MutableSet<RoleType>? = null

如果你看一下 Set 的接口(interface)定义, 你会看到它被定义为 public interface Set<out E> : Collection<E>MutableSet定义为 public interface MutableSet<E> : Set<E>, MutableCollection<E>

Set<out E>我相信的 Java 等价物是 Set<? extends E>而不是你要找的Set<E> .

关于java - Kotlin:集合既没有泛型类型也没有 OneToMany.targetEntity(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44213074/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com