gpt4 book ai didi

java - 在 Hibernate 中绕过 GeneratedValue(合并不在数据库中的数据?)

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

我的问题与 [1] 中描述的相同或 [2] .我需要手动设置默认自动生成的值(为什么?导入旧数据)。如 [1] 中所述使用 Hibernate 的 entity = em.merge(entity) 就可以了。

不幸的是,它没有。我既没有收到错误消息,也没有收到任何其他警告。该实体只是不会出现在数据库中。我正在使用 Spring 和 Hibernate EntityManager 3.5.3-Final。

有什么想法吗?

最佳答案

另一种实现方式,更简单。

这一个适用于both基于注释或基于xml的配置:它依赖于 hibernate 元数据来获取对象的id值。根据您的配置,将 SequenceGenerator 替换为 IdentityGenerator(或任何其他生成器)。 (创建装饰器而不是子类化,将装饰的 ID 生成器作为参数传递给此生成器,留给读者练习)。

public class UseExistingOrGenerateIdGenerator extends SequenceGenerator {
@Override
public Serializable generate(SessionImplementor session, Object object)
throws HibernateException {
Serializable id = session.getEntityPersister(null, object)
.getClassMetadata().getIdentifier(object, session);
return id != null ? id : super.generate(session, object);
}
}

练习答案(根据要求使用装饰器模式),未经过真正测试:

public class UseExistingOrGenerateIdGenerator implements IdentifierGenerator, Configurable {

private IdentifierGenerator defaultGenerator;

@Override
public void configure(Type type, Properties params, Dialect d)
throws MappingException;
// For example: take a class name and create an instance
this.defaultGenerator = buildGeneratorFromParams(
params.getProperty("default"));
}

@Override
public Serializable generate(SessionImplementor session, Object object)
throws HibernateException {
Serializable id = session.getEntityPersister(null, object)
.getClassMetadata().getIdentifier(object, session);
return id != null ? id : defaultGenerator.generate(session, object);
}
}

关于java - 在 Hibernate 中绕过 GeneratedValue(合并不在数据库中的数据?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3194721/

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