Java HibernateException:foo实例的标识符从X更改为Y
我一直在使用entity manager merge()方法时遇到问题 有两个实体“FOO”和“BAR”,它们在模式中没有关系,必须保持这种状态,遗憾的是我不能改变它。FOO中有一个名为PROCESS_CD的列,它与BAR中的类_CD完全相同。CLASS_CD是BAR的主键,但FOO中的PROCESS_CD不是外键 我想将进程_CD中的FOO值从X更新为Y,但hibernate也试图更改BAR中的值,因此发生了错误 我不知道如何指定它只在FOO中更新,而不在BAR中更新 这是我的数据库模式 我的福课Java HibernateException:foo实例的标识符从X更改为Y,java,oracle,hibernate,exception,persistence,Java,Oracle,Hibernate,Exception,Persistence,我一直在使用entity manager merge()方法时遇到问题 有两个实体“FOO”和“BAR”,它们在模式中没有关系,必须保持这种状态,遗憾的是我不能改变它。FOO中有一个名为PROCESS_CD的列,它与BAR中的类_CD完全相同。CLASS_CD是BAR的主键,但FOO中的PROCESS_CD不是外键 我想将进程_CD中的FOO值从X更新为Y,但hibernate也试图更改BAR中的值,因此发生了错误 我不知道如何指定它只在FOO中更新,而不在BAR中更新 这是我的数据库模式 我
@javax.persistence.Entity
@Table(name = "FOO")
public class FooImpl implements Foo {
private Long callCode;
private Journal journal;
@Id
@Column(name = "CALL_CD")
public Long getCallCode() {
return callCode;
}
public void setCallCode(Long aLong) {
callCode = aLong;
}
@ManyToOne(fetch = FetchType.LAZY, targetEntity = BarImpl.class)
@JoinColumn(name = "PROCESS_TYPE")
public Journal getJournal() {
return journal;
}
}
我的律师课
@javax.persistence.Entity
@Table(name = "BAR")
public class BarImpl implements Bar {
private String Code;
private String Description;
public List<Interaction> interaction;
@Id
@Column(name = "CLASS_CD")
public String getCode() {
return Code;
}
public void setCode(String code) {
Code = code;
}
@Column(name = "CLASS_LONG_DESCR")
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
}
最后是我调用的保存方法
这是我得到的错误
Caused by: org.hibernate.HibernateException: identifier of an instance of BarImpl was altered from X to Y
我希望你能帮忙,因为我在网上找不到任何东西
谢谢你们抽出时间来首先,谢谢你们所有回答我问题的人,你们都非常有用D 我发现了我的问题,并且它与我的实际实现有关。我没有创建一个新的barImpl,而是去搜索一个,如果它为空,则需要创建一个新的bar,但如果它找到一个bar,则继续并输入新的值 我不知道实体类与数据库中的实际记录保持关系。因此,当我更改由DAO找到的实体的值时,当我尝试保存foo实体时,它实际上是在尝试更改数据库中的值
祝你今天愉快嗯,还是找不到问题
Caused by: org.hibernate.HibernateException: identifier of an instance of BarImpl was altered from X to Y