gpt4 book ai didi

java - 将 id 设置为零后,Jpa 保留实体

转载 作者:行者123 更新时间:2023-12-01 11:04:00 25 4
gpt4 key购买 nike

我有以下三个实体

@Entity
class Session {

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval=true)
@JoinColumn(name="session_id", referencedColumnName="id")
private List<Testcase> testcases;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval=true)
@JoinColumn(name="session_id", referencedColumnName="id")
private List<SessionChart> sessionCharts;
}

@Entity
class SessionChart {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval=true)
@JoinColumn(name="sessionChart_id", referencedColumnName="id")
private List<ChartMeasurement> chartMeasurement;

}


@Entity
class ChartMeasurement {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@ManyToOne
@JoinColumn(name = "testcase_id", nullable=true, referencedColumnName = "id")
private Testcase testcase;
}

及其相应的 getter 和 setter。创建一个新 session 并在没有任何 session 图表和图表测量的情况下保留它效果很好。但是,当我可以从不同的用户打开以前保存的 session 并将其重命名(将所有者更改为我)并重新保存它从而创建新的数据库记录时,我有一个“另存为”功能。我通过将 id 0 设置为实体及其所有子实体来实现此目的,即测试用例列表、sessionCharts 列表和 sessionCharts 列表内的所有 ChartMeasurement 实体。但是当尝试坚持时,我收到以下错误

object references an unsaved transient instance - save the transient instance before flushing : ChartMeasurement.testcase -> Testcase

我怎样才能克服这种行为?

最佳答案

我假设您正在使用 JPA,因此正在使用 javax.persistence.EntityManager 实例。

我建议在更改 ID 并执行持久操作之前分离对象。

例如,

entityManager.detach(instanceOfYourObjectHere);

发生的情况是, session 持有对您的对象实例的引用,并且由于您更改了主键而感到困惑。

关于java - 将 id 设置为零后,Jpa 保留实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33132106/

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