合并不会在JPA中更新

鲍德里克

具有此实体类:

@Entity
@Table(name="t_period")
public class Period {

    @Id
    @GeneratedValue(strategy = SEQUENCE, generator = "periodSeq")
    @Column(name = "PERIOD_ID", unique = true, nullable = true)
    @SequenceGenerator(name = "periodSeq", sequenceName = "seq_period", allocationSize=1)
    private Long periodId;

    @OneToOne(fetch = FetchType.EAGER, cascade=CascadeType.ALL) 
    @JoinColumn(name = "CLASS_GROUP_ID", referencedColumnName = "ID")
    ClassGroup classGroup;

    @Column(name="PERIOD1")
    Integer period1;

    @Column(name="PERIOD2")
    Integer period2;

    ...
}

和..

/**
 * ProductGroup generated by Tomasz Borowiec
 */
@SuppressWarnings("serial")
@Entity
@Table(name = "T_CLASS_GROUP", uniqueConstraints = @UniqueConstraint(columnNames = "KEY"))
@SequenceGenerator(name = "seqCLASS_GROUP", sequenceName = "SEQ_CLASS_GROUP")
public class ClassGroup implements java.io.Serializable {

    private Long id;
    private String key;


    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 38, scale = 0)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqCLASS_GROUP")
    public Long getId() {
        return this.id;
    }

...

}

the DAO

public class PeriodDaoImpl extends JpaDaoSupport implements PeriodDao {
       ...
    @Override
    public Period saveOrUpdate(Period period) throws Exception {

        if (period.getPeriodId() == null &&
                find(period.getClassGroup()) == null) {
            getEntityManager().persist(period);

        } else {

            period = getEntityManager().merge(period);
        }

        return period;
    }
        ...
}

在Junit中使用以下代码来测试DAO:

    ClassGroup classGroup = classGroupDao.findById(1);

    Period period = new Period();
    period.setClassGroup(classGroup)
    period.setPeriod1(1);

    period = periodDao.saveOrUpdate(period);
    period.setPeriod1(2);
    period = periodDao.saveOrUpdate(period);

我在第二次更新中收到此错误,执行合并,但未持久

在数据库级别中,我为对象classGroup设置了唯一的键:

CREATE TABLE t_period
(
  period_id number(38) not null,
  class_group_id number(38) not null,
  period1 number,
  period2 number,
  CONSTRAINT pk_period PRIMARY KEY        (period_id),
  CONSTRAINT fk_class_group   FOREIGN KEY (class_group_id) REFERENCES t_class_group(id),
  CONSTRAINT uk_class_group UNIQUE        (class_group_id)
);

ORA-00001:唯一约束(ENV_ECAT.UK_CLASS_GROUP)被违反

普雷德拉格·马里奇(Predrag Maric)

使用此代码,persist永远不会执行,因为find(period.getClassGroup())永远不会返回null。这意味着merge()被调用了两次,但是它并没有给您ID,所以我认为这就是为什么它试图将同一对象插入两次的原因。

因此,尝试find(...)if语句中删除以查看其是否有效。

if (period.getPeriodId() == null) {
    getEntityManager().persist(period);
}

如果确实有效,则必须提出其他条件才能将调用转移到merge()persist()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JPA合并不会更新表

来自分类Dev

一对多字段不会在JPA中更新

来自分类Dev

Sourcetree中的Git合并不会获取所有已提交的文件并弄乱了工作副本

来自分类Dev

为什么合并不会引起冲突

来自分类Dev

Git合并不会获取新文件

来自分类Dev

熊猫合并不会保留排序顺序

来自分类Dev

Git合并不会获取新文件

来自分类Dev

熊猫合并不会保留排序顺序

来自分类Dev

合并不会保留对文件的更改,为什么?

来自分类Dev

空对象不会在合并中覆盖吗?

来自分类Dev

在Rails中,如何合并与不会在db:seed上触发的模型创建/更新绑定的外部api调用?

来自分类Dev

ng-model不会在IE中更新

来自分类Dev

OnActivityResult不会在Android中更新ImageView

来自分类Dev

模型不会在Angular 2单选列表中更新

来自分类Dev

jQuery Timepicker不会在AngularJS指令中更新模型

来自分类Dev

UndoManager的canUndo属性不会在SwiftUI中更新

来自分类Dev

QML对象不会在显示中更新

来自分类Dev

滚动后,UILabel不会在UITableViewCell中更新

来自分类Dev

行不会在数据库中更新

来自分类Dev

OnActivityResult不会在Android中更新ImageView

来自分类Dev

按钮不会在Internet Explorer中更新

来自分类Dev

PUT表单不会在Symfony 2中更新

来自分类Dev

输入值不会在托管Bean中更新

来自分类Dev

更改资产outputPath不会在html中更新

来自分类Dev

数据不会在数据库中更新

来自分类Dev

Observer 不会在 JavaFX GUI 中运行更新

来自分类Dev

React - 道具不会在整个组件中更新相同

来自分类Dev

熊猫不会在空列上合并

来自分类Dev

解决冲突后Android Studio Git合并不会结束