如何在IdentifierGenerator hibernate 6.2.2中使用super.generate()?

wfauudbj  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(103)

在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如何修复它,使我可以使用默认策略?

xzv2uavs

xzv2uavs1#

在这里,您必须使用自定义逻辑overridegenerate方法,您已经基于方法签名(override fun generate(...))执行了此操作。现在,您只需在id为0时执行一些自定义逻辑
比如下一个方法

//This is an example never do it in production. You must have custom one
Random random = new Random();   
// Generates random integers 0 to 49  
int x = random.nextInt(50);

字符串
然后,
super.generate(session, obj)你得把它还回去

return if (id == 0) x else id


编译错误应该消失。

相关问题