我使用Spring Boot和Hibernate Envers自定义RevsionEntity
和RevsionListener
来存储用户名、ip等附加信息。它工作正常。
作为一个新的需求,我还需要存储来自用户的修改注释。因此,如果用户更改了实体,他/她还需要输入此更改的原因。此文本应保存在其他修订信息中。
我的控制器
和服务
类中都有文本,但是如何用这些信息填充修订侦听器
?
您的问题的理想答案取决于您当前使用的Hibernate和Spring框架的版本,这两个版本都添加了一些新功能,使得将应用程序状态注入RevisionListener
回调非常容易获得。
如果您使用的是Hibernate 5.2或更早版本,那么您将仅限于使用ThreadLocal
变量注入应用程序状态的传统方法。在web应用程序中,这可以通过设置web筛选器或作为web控制器的一部分来轻松完成。
目标是在调用执行持久性操作的任何业务服务/bean之前初始化ThreadLocal
,并在提交持久性操作后清除状态。由于大多数基于spring的应用程序倾向于将服务方法包装在@Transactional
注释中,因此在控制器中处理ThreadLocal
的初始化和清除似乎是合乎逻辑的。
由于ThreadLocal
是一个全局变量,其作用域为正在执行的线程,因此侦听器将能够向线程本地实例请求该值,以便在自定义修订实体上设置该值。最重要的是在持久性操作开始之前设置它,并在保存后清除它。
这可能不适用于您,因为您处于Spring环境中,但是为了所有可能的配置选择的完整性,我将包含它。
如果您在基于CDI的环境中使用Hibernate 5.3或更高版本,Hibernate添加了对CDI注入的默认支持,基本上允许Hibernate创建的某些对象实际成为CDIBean,并支持将状态注入其中。换句话说
public class CustomRevisionListener implements RevisionListener {
@Inject
private UserReasonBean reasonBean;
@Override
public void newRevision(Object revisionEntity) {
// inside this method, you can get the reason from the injected reasonBean
// and now set the reason on the custom revision entity instance.
}
}
为了让Spring框架bean注入工作,您必须使用Spring框架5.1或更高版本,在那里他们添加了支持,否则在Hibernate中使用Spring框架5.0或之前版本时,您必须使用带有ThreadLocal
变量的遗留方法。
请参见使用Hibernate 5.2或之前版本
如果您在SpringFramework5.1或更高版本中使用Hibernate5.3或更高版本,那么您很幸运。在这个用例中,您可以自动模拟默认的CDI支持,因为SpringFramework5.1提供了自己的BeanRegistry实现,并将其自动连接到Hibernate的框架中。简而言之,这意味着您可以轻松地将SpringBean自动连接到RevisionListener
中,就像使用CDI一样。
public class CustomRevisionListener implements RevisionListener {
@Autowired
private UserReasonBean reasonBean;
@Override
public void newRevision(Object revisionEntity) {
// inside this method, you can get the reason from the injected reasonBean
// and now set the reason on the custom revision entity instance.
}
}
问题内容: 我的扩展程序具有一个包含项目的上下文菜单。我想要做的是:右键单击html元素(例如,输入或文本区域),然后选择并单击菜单中的某个项目时- 由扩展名定义的某些值将输入到输入中。 目前,我已经意识到。 简单的输入就可以了。 当存在具有自定义事件处理的输入(例如日历或电话输入或货币输入)时,问题就开始了,这些输入以某种方式转换了用户输入。 由于我直接在元素上设置了一个值-省略了处理逻辑,这会
用户自定义 本章讲介绍一些开发过程中常用需要自定义的东西。 一、自定义404页面 一般比较完整的站点,都会有自定义的404页面,既美观统一、又能保持访问者不至于因为错误页面而退出网站。 比如说duowan.com的404页面,是一个坦克大战的小游戏,可以在线玩并且成绩还会进入排行榜,和其他网友一较高下。 对404错误页面的建议: 建议不要使用PHP动态页面,纯HTML页面会比较好。 具特色,但不能
我正在设置一个,它在用户输入整数之前一直执行。但是,按照我现在的方式,循环在输入整数后再次打印消息,然后程序正常执行。有人能建议一种方法来使输入整数后不再打印该消息吗?谢了!
本文向大家介绍Django自定义用户表+自定义admin后台中的字段实例,包括了Django自定义用户表+自定义admin后台中的字段实例的使用技巧和注意事项,需要的朋友参考一下 1.自定义用户表 注意事项 必须在settings中配置AUTH_USER_MODEL这个字段 2.在models文件中编写UserModel类 添加完成后,在当前app的admin文件中注册 3.测试 编写完上述步骤后
我在修改我安装的WordPress流行帖子插件时遇到了一些问题。 它可以选择从自定义字段获取缩略图,我已将其输入为“image_facebook”。但是缩略图没有显示。 在检查代码时,我发现imgsrc有post id而不是返回图像URL。 我已经把问题缩小到我安装的另一个插件http://wordpress.org/plugins/advanced-custom-fields/ 当它处于活动状态
用户输入一个值,例如、、等 Java当然用反斜杠对上述字符进行转义。因此,应用程序在缓冲区中有以下字符串 、、 现在如何将这些字符串转换回、、 我可以写一个< code>switch语句。但是有无限多的选择 如果用户输入一些unicode字符怎么办? 这不起作用 如何解释用户输入的转义字符?