gpt4 book ai didi

java - hibernate jpa entitymanager 提交不将对象写入数据库

转载 作者:行者123 更新时间:2023-11-30 11:48:53 25 4
gpt4 key购买 nike

我正在使用 hibernate JPA(没有 Spring)并且它运行良好,但是我遇到了一个问题,这个问题在过去 3 天里一直困扰着我。

我已经编写了一些通用的 DAO 类并使用它们来持久化我的对象。它们都工作正常,除了一类没有被持久化的对象。没有异常被抛出。我试过在 hibernate 代码中调试,发现实体没有被持久化的原因是在 org.hibernate.event.def.DefaultFlushListener onFlush() 方法中,source。 getPersistenceContext().getEntityEntries().size() == 0 所以不执行刷新。但我不明白为什么会这样。

有问题的类如下所示:

    @Entity 
@Table(name="er_batch_runs")
public class BatchRun implements Serializable, Comparable<BatchRun>, BatchBean {

private Long runId;
private String hostname;
.... more field here

@Override
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="runseq")
@SequenceGenerator(name="runseq", sequenceName="er_batch_runs_seq", allocationSize=1 /*, initialValue = 10*/)
@Column(name="batch_run_id")
public Long getId() {
return runId;
}

public void setId(long runId) {
this.runId = runId;
}

@Column(name="hostname")
public String getHostname() {
return hostname;
}

public void setHostname(String hostname) {
this.hostname = hostname;
}

非常简单的 hibernate JPA 内容。

这是另一个类:

@Entity
@Table(name="er_batch_txns")
public class BatchTxn implements Serializable, Comparable<BatchTxn>, BatchBean {

private long id;
.......... more fields

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="batchtxnseq")
@SequenceGenerator(name="batchtxnseq", sequenceName="ER_BATCH_TXNS_SEQ", allocationSize=1/*00, initialValue = 10*/)
@Override
@Id
@Column(name="BATCH_TXN_ID")
public Long getId() {
return id;
}

BatchBean 接口(interface)允许我像这样使用通用 DAO:

    public Long create(BatchBean newInstance) {
getOpenEntityManager().persist(newInstance);
logger.debug("hopefully created {} with id {}",newInstance.getTypeName(),newInstance.getId());
return newInstance.getId();
}

交易是手动处理的。我已将刷新类型设置为 COMMIT(即提交时刷新),当我完成持久化后,我将执行提交。在持久化之后,BatchTxn 对象被分配了一个来自序列的主键。当我调试 hibernate 时,我可以看到 getPersistenceContext().getEntityEntries() 返回一个空的 Map。

所以问题是为什么 BatchTxn 没有被提交持久化,而 BatchRuns 和其他 5 个实现 BatchBean 的类是?

我正在使用 hibernate 3.6.0 Final

最佳答案

我在你的代码中看到的唯一可疑的是 BatchTxn 类中的这个:

private long id;

这将自动设置为零。也许您应该使用 Long(带有大写字母)?

关于java - hibernate jpa entitymanager 提交不将对象写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8578257/

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