gpt4 book ai didi

java - 如何从可用作自定义实体 ID 生成器中实体 ID 的对象属性生成 UID?

转载 作者:行者123 更新时间:2023-11-29 09:36:12 24 4
gpt4 key购买 nike

所以我有一个问题,我需要知道将在数据库中使用的对象的 ID,然后再保留它。

我需要做的是创建自定义生成器:

public class CustomEntityIdGenerator extends SequenceStyleGenerator {

@Override
public Serializable generate(SharedSessionContractImplementor session,
Object object) throws HibernateException {


if (object instanceof IWorkaround) {
IWorkaround workaround = (IWorkaround) object;
//TODO Generate UID from multiple Workaround properties.
return 1l;
} else {
throw new HibernateException("Cannot generate custom ID for this Entity, Must be IWorkaround");
}

}

}

问题是:如何安全可靠地从对象属性生成长 ID?我正在考虑将它的一些属性连接到字符串中,然后对该字符串进行哈希处理,并以某种方式将哈希值设置为长,问题是哈希为长部分,我如何可靠地做到这一点?什么样的算法适合这里?

或者有更好的方法吗?

注意:在有人问之前,我不能使用序列中的+1。由于该系统可以由多个用户并行使用。不能依赖于 id 序列中的下一个数字。

为了更好地说明我在做什么:

//Multiple people call
saveMe(objectToBePersisted){
createDirectoriesAndProcessResources(idThatWillBeUsedInDB)// <-- Now I use ID
otherStuff(objectToBePersisted);
//Might have been declined and method ends
saveToDB(objectToBePersisted)// <--now it gets ID
}

最佳答案

我建议使用随机序列的简化基数 64 或 62,您可以计算给定长度和基数的碰撞机会。您不必从属性生成它。你可以玩一下:https://alex7kom.github.io/nano-nanoid-cc

关于java - 如何从可用作自定义实体 ID 生成器中实体 ID 的对象属性生成 UID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57561715/

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