存在约束违规时继承实体的部分提交

时间:2018-04-23 21:04:07

标签: java hibernate jpa spring-transactions rollback

我已经映射了三个JPA类,就像这样。

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "super_table")
public abstract class SuperClass {
  @Id
  public Integer getId() {
    return id;
  }
  ...
}

@Entity
@Table(name = "child_table_a")
@PrimaryKeyJoinColumn(name = "fk_id_super_table")
public class ChildA extends SuperClass {
  ...
  @Column(name = "serial_code", nullable = true, unique = true)
  public String getSerialCode() {
    return serialCode;
  }
  ...
}

@Entity
@Table(name = "child_table_b")
@PrimaryKeyJoinColumn(name = "fk_id_super_table")
public class ChildB extends SuperClass {
  ...
}

因此,有一种持久化对象的方法。此方法由@Transactional注释注释。我的明显意图是避免持续存在错误或不完整。

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void salvar(SuperClass obj) {
    getEntityManager().persist(obj);
}

当对象没问题时,方法执行正确。当该方法尝试持久化对象ChildA时,如果超类的字段正常,但字段serialCode在表上存在一个值(唯一约束),则带注释的方法不会抛出任何例外。当Spring框架尝试提交时,它会抛出异常(关于数据库唯一约束)。但是,表super_table的元组被插入并提交。

有人可以帮我解决这个问题吗?

我正在使用:   - Hibernate 4.0.1.Final   - 春季3.2.2   - JBoss AS 7.1

0 个答案:

没有答案