我已经在eclipseLink中实现了EntityListener。我的应用程序是使用spring-boot,spring-data和eclipseLink构建的。当插入1表中的数据时,我有要求在2个表(审计表)中插入记录。我的Listener中有EntityManager,一切似乎正常。当我调试代码时,我可以看到我将要保存的实体具有从在DB级维护的序列生成的“id”。但是当事务提交时,我只看到主表数据,但审计表数据没有被提交。下面是示例代码:eclipseLink事务问题的弹簧启动
@Entity
@Table(name="MyTable")
@EntityListeners(MyTableListener.class)
public class MyTable implements Serializable{
private static final long serialVersionUID = -5087505622449571373L;
private Long id;
// Rest of the fields
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="MASTER_SEQ")
@SequenceGenerator(name="MASTER_SEQ",sequenceName="MASTER_SEQ",allocationSize=1)
public Long getId() {
return id;
}
// Getters/Setters
}
监听器代码:
public class MyTableListener extends DescriptorEventAdapter {
@Override
public void postInsert(DescriptorEvent event) {
MyTable msg = (MyTable)((InsertObjectQuery) event.getQuery()).getObject();
EntityManager em = BeanUtil.getBean(EntityManager.class);
MyAudit statusAudit = new MyAudit();
statusAudit.setNewVal("NEW");
statusAudit.setOldval(null);
statusAudit.setTargetColumnName(targetColumn);
statusAudit.setTargetRecordId(msg.getId());
em.persist(statusAudit);
}
}
似乎没有什么是错的代码。但是当我在集合中看到sql日志为“FINEST”时,我可以看到插入查询未被审计表触发。 我一直在处理这个问题超过2天,不明白究竟是什么错误。请帮帮我。
有些代码会有帮助。根据问题的当前状态,我们只能告诉您,您的代码已损坏。当你在它的时候,添加SQL和事务日志记录。 –
已添加代码。 – rishi