Hibernate 在JPA实体中自动设置createdBy和updatedBy
我正在开发一个JPA(的Hibernate实现)、Spring和Stripes web应用程序。我有许多JPA实体,它们具有以下用于审计和查询目的的共同字段: createdBy—创建实体的人员的用户ID。 createdOn—实体创建的日期 updatedBy—上次更新实体的人员的用户ID UpdateOn—上次更新实体的日期 我已经让我的应用程序工作,这样当实体被持久化时,createdOn和updatedOn会自动设置,但我不确定如何在不必通过当前登录的用户ID从控制器类一直传递到DAO的情况下获得createdBy和updatedBy字段 有人对我如何在不到处传递用户ID的情况下实现这一点有什么建议吗?请注意,当前用户ID目前存储在HttpSession对象中,因此我的后端需要以某种方式访问此数据Hibernate 在JPA实体中自动设置createdBy和updatedBy,hibernate,spring,jpa,stripes,Hibernate,Spring,Jpa,Stripes,我正在开发一个JPA(的Hibernate实现)、Spring和Stripes web应用程序。我有许多JPA实体,它们具有以下用于审计和查询目的的共同字段: createdBy—创建实体的人员的用户ID。 createdOn—实体创建的日期 updatedBy—上次更新实体的人员的用户ID UpdateOn—上次更新实体的日期 我已经让我的应用程序工作,这样当实体被持久化时,createdOn和updatedOn会自动设置,但我不确定如何在不必通过当前登录的用户ID从控制器类一直传递到DAO的
谢谢 您可以查看以下方法之一,以在业务层中将用户ID作为上下文传递:
- 可测试性:需要在测试中设置上下文数据
- 契约:上下文数据参与契约以使用实体,但在界面中不清晰可见李>
希望它有帮助…我会创建这样一个类:
@MappedSuperclass
public abstract class AuditableDomainClass {
private long createdBy;
private long updatedBy;
//getters and setters
您的实体类具有您所描述的需求,只需扩展该类,您可以在需要的层(例如控制器)中设置变量,而不必在DAO中一直担心它。我认为ThreadLocal可能是在我的应用程序中实现这一点的最干净的方法。是的,我已经有了类似的东西-我的问题是我不想从控制器层传入变量-但看起来我可能不得不这样做。你不想在控制器中设置createdBy和updatedBy,然后再将其持久化?你使用了什么机制来检查对象是否脏,所以你设置了
updateBy/At
字段?我问了相关问题,请结帐: