在Hibernate 5中,我可以这样使用
class UseIdOrGenerate : IdentityGenerator() {
override fun generate(session: SharedSessionContractImplementor, obj: Any?): Any {
val id = session.getEntityPersister(null, obj).getIdentifier(obj, session) as Int
return if (id == 0) super.generate(session, obj) else id
}
}
字符串
但是在hibernate6中,我不能使用super.generate(),因为IdentifierGenerator是接口,而generate()是接口方法。所以如果我写一段如下的代码,
class UseIdOrGenerate : IdentifierGenerator {
override fun generate(session: SharedSessionContractImplementor, obj: Any?): Any {
val id = session.getEntityPersister(null, obj).getIdentifier(obj, session) as Int
return if (id == 0) super.generate(session, obj) else id
}
}
型
编译器说“抽象成员不能直接访问”。2如何修复它,使我可以使用默认策略?
1条答案
按热度按时间xzv2uavs1#
在这里,您必须使用自定义逻辑
override
generate
方法,您已经基于方法签名(override fun generate(...)
)执行了此操作。现在,您只需在id为0时执行一些自定义逻辑比如下一个方法
字符串
然后,
super.generate(session, obj)
你得把它还回去型
编译错误应该消失。