Java JPA-如何在提交后调用web服务的方法
抱歉,这可能非常简单,但我是JPA新手,我不确定在将新记录提交到数据库后,在何处插入需要调用的方法的函数调用。我有以下资料:Java JPA-如何在提交后调用web服务的方法,java,jpa,Java,Jpa,抱歉,这可能非常简单,但我是JPA新手,我不确定在将新记录提交到数据库后,在何处插入需要调用的方法的函数调用。我有以下资料: @POST @Override @Consumes({"application/xml", "application/json"}) @Path("...") @RolesAllowed("...") public void create(LearningActivity entity){ super.create(entity); } 在上述过程完成后,我需要
@POST
@Override
@Consumes({"application/xml", "application/json"})
@Path("...")
@RolesAllowed("...")
public void create(LearningActivity entity){
super.create(entity);
}
在上述过程完成后,我需要调用一个自定义方法myMethod()。我想我可以在super.create(entity)之后立即添加它,但很明显,提交过程直到整个create()方法执行才完成。我还尝试将@PostPersist添加到基础实体中,但这仍然是在提交记录之前
任何帮助都将不胜感激
我不确定在何处为需要的方法插入函数调用
将新记录提交到数据库后调用
听起来您需要使用事件监听器,每次将实体提交到数据库时都会执行一个名为PostPersist的事件,您可以使用上面的代码进行配置
@Entity
public class X{
@PostPersist
public void myMethod(){
//Do anything before the commit of the transaction that save a new entity of type X
}
@PostUpdate
public void myMethod2(){
//This code will run each time you update and save an entity of type X
}
}
PostPersist在提交完成后调用,PrePersist在您调用persist方法时执行。基于,在提交之前调用@PostPersist
我发现的另一种方法是创建一个静态助手方法,在提交当前事务会话后调用Runnable
publicstaticvoidaftertransactioncommitted(最终可运行函数){
if(TransactionSynchronizationManager.isSynchronizationActive()){
TransactionSynchronizationManager.registerSynchronization(
新建TransactionSynchronizationAdapter(){
@凌驾
public void afterCommit(){
函数run();
}
}
);
}否则{
函数run();
}
}
你会像这样使用它
afterTransactionCommitted(() -> myMethod());
Koitoer,谢谢你。实际上,我已经按照您的建议在实体级别尝试了PostPersist。这方面的文档似乎有些混乱。给出的一般描述是,它“在数据库中存储新实体后(在提交或刷新期间)”执行。使用调试器,我能够确定PostPersist似乎在数据持久化到JPA对象之后,但在提交到DB之前执行。我还需要进一步测试,但我将抛弃JPA,回到JDBC。我想知道是否需要添加一个类似于j2ee事件监听器servlet的自定义事件监听器,并且过滤器与JPA无关,显然,您可以在事务结束时在数据库中添加一个过滤器来生成任何进程,但这听起来不是一个好的设计,但是谁在乎XD呢,我建议最好使用带有事务注释的服务层。谢谢您的提醒。你能给我举一个带有事务注释的服务层的例子吗?我会很感激的,因为我仍然被这一切弄得不知所措。