我已经映射了三个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