Java jooq RecordListener从不捕获updateEnd和updateStart事件
使用JOOQ 3.9.6,我尝试实现如下记录侦听器:Java jooq RecordListener从不捕获updateEnd和updateStart事件,java,jooq,audit,Java,Jooq,Audit,使用JOOQ 3.9.6,我尝试实现如下记录侦听器: public class AuditListener extends DefaultRecordListener { .... @Override public void insertEnd(RecordContext ctx) { // OK we enter here when inserting a record } ... @Override public
public class AuditListener extends DefaultRecordListener {
....
@Override
public void insertEnd(RecordContext ctx) {
// OK we enter here when inserting a record
}
...
@Override
public void updateEnd(RecordContext ctx) {
// never enter this method when we update a record
}
}
我们使用更新通过DSLContext更新记录。。。并执行更新。AuditListener从未捕获updateEnd事件
以下是用于更新记录的存储库:
@Component
public class JooqMyentityRepository extends AbstractJooqRespository<MyentityRecord, Myentity> implements MyentityRepository {
public JooqMyentityRepository() {
super(Myentity.class, MYENTITY);
}
@Override
public Myentity findById(Integer myentityId) {
return dsl.select(MYENTITY.fields()).from(MYENTITY).where(MYENTITY.ID.eq((myentityId))).fetchOneInto(Myentity.class);
}
@Override
@Transactional
public void update(Myentity myentity) {
dsl.update(MYENTITY)
.set(MYENTITY.NAME, myentity.getName())
.set(MYENTITY.AREA_ID, myentity.getAreaId())
.set(MYENTITY.ACTIVE, myentity.getActive())
.set(MYENTITY.BRAND, myentity.getBrand())
.where(MYENTITY.ID.eq(myentity.getId()))
.execute();
}
}
这是一个问题还是我遗漏了什么?SPI Javadoc声明它拦截对类似的方法的调用
它无法截获任意更新调用,例如DSLContext.update,甚至DSLContext.executeUPDATE。。因为jOOQ无法确定数据库中的update语句将影响多少记录以及哪些记录。除此之外,在您的服务中,DSLContext.update语句的生命周期中不涉及实际的UpdateRecord,因此您希望对updateEnd进行哪种SPI调用?您可以显示更新调用的代码吗?@LukasEder我添加了代码,如果您需要更多信息,可以询问是否完善,我是JOOQ的新手,正在开发一个现有的应用程序,当时我还不知道还有其他方法可以更新记录。现在我看得很清楚,谢谢你,卢卡斯
@Component
@Scope(value = "singleton")
public class CustomerService {
@Autowired
private MyentityRepository myentityRepository;
public void editCustomerMyentity(CustomerMyentity customerMyentity){
Myentity myentity = myentityRepository.findbyId(customerMyentity.getId());
...
// Do treatments here : insert another record to trace the modification
...
myentity.setName(customerMyentity.getName());
myentity.setBrand(customerMyentity.getBrand());
myentityRepository.update(myentity);
}
}