Java 存在约束冲突时继承实体的部分提交
我已经映射了三个JPA类,就像这样Java 存在约束冲突时继承实体的部分提交,java,hibernate,jpa,spring-transactions,rollback,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") @PrimaryKeyJ
@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框架尝试提交时,它抛出一个异常(关于数据库唯一约束)。但是,插入并提交了tablesuper\u table
的元组
有人能帮我解决这个问题吗
我正在使用:
-Hibernate 4.0.1.1最终版本
-春季3.2.2
-JBoss AS 7.1您是否启用了事务管理/配置了事务管理器?听起来很像每个语句都是自动提交的,这在没有事务管理器的情况下会发生。有关配置一个的更多详细信息,请参阅。@codemonkey,谢谢关注。实际上,我使用的是默认的JTA事务管理器。是否需要通过其他方式指定事务管理器?能否共享事务管理器的配置?是否已使用
@EnableTransactionManagement
或
为事务启用注释处理?