我正在尝试解决 kotlin 密封类的继承问题和 hibernate 的强制问题。
这是我的课程:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
sealed class LegalGuardian(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int? = null
)
@Entity
@DiscriminatorValue(value = "MOTHER")
data class MotherLegalGuardian(
@OneToOne(cascade = [CascadeType.ALL], orphanRemoval = true)
val pesel: Pesel
) : LegalGuardian()
@Entity
@DiscriminatorValue(value = "OTHER")
data class OtherLegalGuardian(
val firstName: String,
val lastName: String,
@OneToOne
val address: Address
) : LegalGuardian()
Run Code Online (Sandbox Code Playgroud)
这是抛出的问题:
原因:org.hibernate.MappingException:无法在 org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:123) 处获取 org.hibernate.persister.entity.SingleTableEntityPersister 的构造函数。 .PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:348) 在 org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) 在 …
嗨,我有 1330 个对象的列表,并且想应用方法并获得集合作为结果。
val result = listOf1330
.asSequence()
.map {
someMethod(it)
}
val resultSet = result.toSet()
Run Code Online (Sandbox Code Playgroud)
它在没有 toSet 的情况下工作正常,但如果执行时间长了大约 10 倍。我已经使用序列来使它工作得更快,但结果我需要没有重复的列表(设置)。
简单地说:将序列转换为集合的最有效方法是什么?
I'm going to groupby Set<Pair<String,Int>> values to Map<String, Set<Int>> so simply. Find all matching ints for string and create set. I've got solution that works:
setStringInt.stream()
.collect(
groupingBy(
Projection::stringObj,
mapping(Projection::intObj,
toSet<Int>())
)
)
Run Code Online (Sandbox Code Playgroud)
I've got kind of cleaner:
.groupBy { it.stringobj }
.mapValues { it.value.map { it.intobj }.toSet() }
Run Code Online (Sandbox Code Playgroud)
But it's looking quite dirty. Do you have any idea how to simplify this? Am I able to do this without using stream?