Java / Hibernate 在保存更新或删除后调用存储过程
Java / Hibernate call stored procedure after save update or delete
如何在插入、更新或删除对象后调用存储过程?
我的对象是这样的:
@Entity
public class a {
private String b;
private String c;
public a() {
super();
}
// getter setter
@PostPersist
@PostUpdate
@PostRemove
private void callProcedure() {
// ???
}
}
执行此操作的最佳方法是什么?
在 Java 应用程序中,您不应在实体模型中调用业务逻辑。您可以在实体中的@PrePersist、@PreUpdate 中设置一些值,例如:
/**
* Sets createdAt before insert
*/
@PrePersist
public void setCreationDate() {
this.createdAt = new Date();
}
/**
* Sets updatedAt before update
*/
@PreUpdate
public void setChangeDate() {
this.updatedAt = new Date();
}
或者您可以在@PostPersist 方法中获取生成的主键值。但是存储过程处理属于你的服务。您的服务应调用存储过程并获取结果以供进一步处理。您不能在您的服务中使用@PostPersist、@PostUpdate 和@PostRemove 注解,但您可以在您的服务中编写afterSave()、afterRemove() 方法来调用存储过程并处理调用存储过程的结果。
查看此 link 示例:How to call stored procedures in JPA
如何在插入、更新或删除对象后调用存储过程?
我的对象是这样的:
@Entity
public class a {
private String b;
private String c;
public a() {
super();
}
// getter setter
@PostPersist
@PostUpdate
@PostRemove
private void callProcedure() {
// ???
}
}
执行此操作的最佳方法是什么?
在 Java 应用程序中,您不应在实体模型中调用业务逻辑。您可以在实体中的@PrePersist、@PreUpdate 中设置一些值,例如:
/**
* Sets createdAt before insert
*/
@PrePersist
public void setCreationDate() {
this.createdAt = new Date();
}
/**
* Sets updatedAt before update
*/
@PreUpdate
public void setChangeDate() {
this.updatedAt = new Date();
}
或者您可以在@PostPersist 方法中获取生成的主键值。但是存储过程处理属于你的服务。您的服务应调用存储过程并获取结果以供进一步处理。您不能在您的服务中使用@PostPersist、@PostUpdate 和@PostRemove 注解,但您可以在您的服务中编写afterSave()、afterRemove() 方法来调用存储过程并处理调用存储过程的结果。
查看此 link 示例:How to call stored procedures in JPA