Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate:行被另一个事务更新或删除(或未保存的值映射不正确)_Java_Hibernate_Dao_Hibernate Mapping - Fatal编程技术网

Java Hibernate:行被另一个事务更新或删除(或未保存的值映射不正确)

Java Hibernate:行被另一个事务更新或删除(或未保存的值映射不正确),java,hibernate,dao,hibernate-mapping,Java,Hibernate,Dao,Hibernate Mapping,首先,对不起。我知道有很多相同的话题,但也许我的英语不好,或者我没有找到正确的答案 我使用乐观锁定@Version注释。我需要一个表中的一对一行,从不同的表中有许多行,我这样插入: 所以它必须是这样的: 机构(这是我表格(机构)中的一行) 所以,为了将这个CreationDate放在不同的变体中,我决定手动为我想要添加CreationDate的特定机构输入id 我的主要方法类: CreationDate crdate = new CreationDate(); Institution in

首先,对不起。我知道有很多相同的话题,但也许我的英语不好,或者我没有找到正确的答案

我使用乐观锁定@Version注释。我需要一个表中的一对一行,从不同的表中有许多行,我这样插入:

所以它必须是这样的:

机构(这是我表格(机构)中的一行)

所以,为了将这个CreationDate放在不同的变体中,我决定手动为我想要添加CreationDate的特定机构输入id

我的主要方法类:

CreationDate crdate = new CreationDate();   
Institution inst= new Institution();
Set<Institution> instituset = new HashSet<Institution>();

***inst.setInstitutionId(2);***

inst.setNameOfInstitution("MyInstitution");
inst.setTypeName("Education");
instituset.add(inst);
因此,在第二次尝试将数据插入我的机构时会出现异常

 Hibernate: insert into CREATION_DATE (CHILD_ADMISSION_DATE,
 CHILD_GO_SCHOOL_DATE, PARTICULAR_DATE, VERSION) values (?, ?, ?, ?)

 Hibernate: insert into SCHEDULE_ROTATION_CHILD (CHILD_ADMITTED,
 CHILD_GO_SCHOOL, CHILD_UNDER_3_YEARSOLD, CHILD_UPPER_3_YEARSOLD,
 DAY_SCHEDULE, NUMBER_OF_CHILD, ROTATION, VERSION, WORK_SCHEDULE)
 values (?, ?, ?, ?, ?, ?, ?, ?, ?)

 Hibernate: update INSTITUTION set
 NAME_INSTITUTION=?, TYPE_NAME=?, VERSION=? where INSTITUTION_ID=? and
 VERSION=? Exception in thread "main"

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException:
     Object of class [edu.demidov.dom.Institution] with identifier [2]:
     optimistic locking failed; nested exception is
     org.hibernate.StaleObjectStateException: Row was updated or deleted by
    another transaction (or unsaved-value mapping was incorrect):
     [edu.demidov.dom.Institution#2]

如果我理解正确的话,您正在尝试将ID为2的现有机构添加到新的CreationDate。既然这个机构已经存在,你不应该创建一个新的。您只需从Hibernate会话获取它:

Institution institution = (Institution) session.load(Institution.class, 2);
creationDate.addInstitution(institution);

我面临着同样的问题,那就是春天和冬眠的结合。在打破我的头脑3-4个小时后,我只是随机检查了我的有关版本的专栏。因为我使用的是一个旧表,我最近在其中引入了version列,并且没有默认为零,所以它为所有行以及我试图删除的行添加了
null
。所以,正如我猜测的那样,我输入了0,它在下一次运行时神奇地工作了。我希望这会有所帮助。

检查要更新的模型对象。 基本上你应该检查你的'notnull'值;
如已定义和主键等。这将有所帮助。

对我来说,问题是我总是使用相关
JpaRepository
save
方法,而不首先获取现有实体。因此,第一次保存总是很顺利,但是当我更新实体时,抛出了异常。我检查了数据库中的
version
列,发现这个版本永远不会超过1。请确保在更新实体之前始终尝试获取该实体

你好,先生。。很高兴再次见到你你是我的节目主持人。谢谢你宝贵的回答。先生,我正在尝试将CreationDate添加到数据库中机构ID为2的现有机构中。第一次插入操作没有出现问题,但第二次插入操作有错误。但也考虑我的DAO代码,我没有声明任何交易,但它到底是做交易吗???非常感谢你的帮助。是的,这就是我的回答告诉你的方法。事务应该在服务层启动,而不是在DAO层。哦,我不知道事务应该在服务层启动,我是这方面的新手。对很多事情都不知道。很抱歉,我提出了一些不恰当的问题。但也许你们给我指出了一个正确的方向,这篇好文章如何使用两个参数提取数据,因为我也不能理解这一点。。我想在一次查询中提取与特定名称和特定日期对应的数据。在这里和对你这样做不是很不礼貌吗??谢谢。最好的参考资料是一本好书,或者是官方文件:我也损失了大约3个小时,这对我来说是个问题,一个版本栏是空的。谢谢当删除一个列名为“errors”的实体时,我也遇到了类似的问题,它包含序列化的json字符串。当列为null时,delete可以正常工作。但是当它携带非null值时,它抛出前面提到的异常。仍在试图找出根本原因。任何帮助都将不胜感激。我忘了将“id”作为隐藏值传递给我的表单,因此它被设置为默认值0,而该值在db中不存在,因此在尝试hibernate更新时引发此异常。
@Entity
@Table(name="CREATION_DATE")
public class CreationDate implements Serializable {


    private static final long serialVersionUID = 1648102358397071136L;

    @Id
    @GeneratedValue(strategy=IDENTITY)
    @Column(name="DATE_ID")
    private int dateId;


    @Column(name="PARTICULAR_DATE")
    private Date particularDate;

    @Version
    @Column(name="VERSION")
    private int version;

    @Temporal(TemporalType.DATE)
    @Column(name="CHILD_GO_SCHOOL_DATE")
    private Date childGoSchoolDate;

    @Temporal(TemporalType.DATE)
    @Column(name="CHILD_ADMISSION_DATE")
    private Date childAdmissionDate;


    @ManyToMany(fetch = FetchType.LAZY)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    @JoinTable(name="CREATIONDATE_INSTITUTION", 
                                    joinColumns=@JoinColumn(name="DATE_ID"), 
                    inverseJoinColumns=@JoinColumn(name="INSTITUTION_ID"))
    private Set<Institution> institution = new HashSet<Institution>();

    @OneToMany(fetch=FetchType.EAGER, orphanRemoval=true)
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    @JoinTable(name="SRC_DATE", joinColumns=@JoinColumn(name="DATE_ID"),
                    inverseJoinColumns=@JoinColumn(name="SRC_ID"))
    private List<ScheduleRotationChild> scheduleRotationChild = new ArrayList<ScheduleRotationChild>();


        //getter and setter methods ommited


    public String toString() {

        return  dateId + " , " 
            + particularDate + " , " 
            + childGoSchoolDate + " , " 
            + childAdmissionDate + "  " + scheduleRotationChild ;

    }
}
public CreationDate insertData(CreationDate creationdate) {
        sessionFactory.getCurrentSession().saveOrUpdate(creationdate);
        log.info(creationdate.getDateId());
        return creationdate;

    }
 Hibernate: insert into CREATION_DATE (CHILD_ADMISSION_DATE,
 CHILD_GO_SCHOOL_DATE, PARTICULAR_DATE, VERSION) values (?, ?, ?, ?)

 Hibernate: insert into SCHEDULE_ROTATION_CHILD (CHILD_ADMITTED,
 CHILD_GO_SCHOOL, CHILD_UNDER_3_YEARSOLD, CHILD_UPPER_3_YEARSOLD,
 DAY_SCHEDULE, NUMBER_OF_CHILD, ROTATION, VERSION, WORK_SCHEDULE)
 values (?, ?, ?, ?, ?, ?, ?, ?, ?)

 Hibernate: update INSTITUTION set
 NAME_INSTITUTION=?, TYPE_NAME=?, VERSION=? where INSTITUTION_ID=? and
 VERSION=? Exception in thread "main"

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException:
     Object of class [edu.demidov.dom.Institution] with identifier [2]:
     optimistic locking failed; nested exception is
     org.hibernate.StaleObjectStateException: Row was updated or deleted by
    another transaction (or unsaved-value mapping was incorrect):
     [edu.demidov.dom.Institution#2]
Institution institution = (Institution) session.load(Institution.class, 2);
creationDate.addInstitution(institution);