我已經在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