gpt4 book ai didi

java - jooq RecordListener 永远不会捕获 updateEnd 和 updateStart 事件

转载 作者:行者123 更新时间:2023-12-02 11:27:08 26 4
gpt4 key购买 nike

使用 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 void updateEnd(RecordContext ctx) {
// never enter this method when we update a record
}
}

我们使用更新的 update(...) 和execute() 通过 DSLContext 更新记录。 updateEnd 事件永远不会被 AuditListener 捕获。

这是用于更新记录的存储库:

@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();

}
}

在自定义服务中调用存储库:

@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);

}
}

这是一个问题还是我遗漏了什么?

最佳答案

RecordListener SPI Javadoc 声明它拦截对诸如 UpdatableRecord.update() 之类的方法的调用.

它无法拦截任意更新调用,例如DSLContext.update() 甚至 DSLContext.execute("UPDATE ..") 因为 jOOQ 无法确定有多少记录以及哪些记录将受到影响数据库中的更新语句。除此之外,在您的服务中 DSLContext.update() 语句的生命周期中并不涉及实际的 UpdatableRecord,那么对 进行什么样的 SPI 调用>updateEnd() 你会期望吗?

关于java - jooq RecordListener 永远不会捕获 updateEnd 和 updateStart 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49538617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com