Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HibernateException:foo实例的标识符从X更改为Y_Java_Oracle_Hibernate_Exception_Persistence - Fatal编程技术网

Java HibernateException:foo实例的标识符从X更改为Y

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中更新 这是我的数据库模式 我

我一直在使用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