我在Spring启动应用程序中使用spring-data-envers.我可以成功记录我的实体的审核.
现在,我需要在UI中向用户显示审计数据.就像搜索表单一样,用户可以选择持续时间和实体,以便查看审计日志.
string-data-envers提供的RevisionRepository只有以下三种方法.
@NoRepositoryBean
public interface RevisionRepository
如何编写自定义查询以获取特定用户在两个日期之间对实体的所有修订.
请注意,我在user_rev_entity表中添加了其他列,用于存储用户ID和修改日期.如果我将此表与entity_aud表连接,我可以得到结果.
以下是我的Audit表的脚本.
CREATE TABLE `user_rev_entity` (
`id` int(11) NOT NULL AUTO_INCREMENT,`timestamp` bigint(20) NOT NULL,`created_by` bigint(20) NOT NULL,`created_date` datetime NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
CREATE TABLE `revchanges` (
`rev` int(11) NOT NULL,`entityname` varchar(255) DEFAULT NULL,KEY `FK_et6b2lrkqkab5mhvxkv861n8h` (`rev`),CONSTRAINT `FK_et6b2lrkqkab5mhvxkv861n8h` FOREIGN KEY (`rev`) REFERENCES `user_rev_entity` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `roles_aud` (
`role_id` bigint(20) NOT NULL,`rev` int(11) NOT NULL,`revtype` tinyint(4) DEFAULT NULL,`description` varchar(255) DEFAULT NULL,`description_mod` bit(1) DEFAULT NULL,`display_name` varchar(255) DEFAULT NULL,`display_name_mod` bit(1) DEFAULT NULL,`is_enabled` bit(1) DEFAULT NULL,`enabled_mod` bit(1) DEFAULT NULL,`title` varchar(255) DEFAULT NULL,`title_mod` bit(1) DEFAULT NULL,PRIMARY KEY (`role_id`,`rev`),KEY `FK_pkqm51vsc35w2axvnns4bpas9` (`rev`),CONSTRAINT `FK_pkqm51vsc35w2axvnns4bpas9` FOREIGN KEY (`rev`) REFERENCES `user_rev_entity` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
因此,基本上我正在寻找特定用户在特定时间内为实体说出的所有更改.
会有更多这样的实体.
最佳答案
Spring Data Envers不支持您在spring数据jpa中习惯的自定义查询.它所做的只是提供方便的RevisionRepository接口.
原文链接:https://www.f2er.com/spring/432460.html但是,您可以使用修订版< N,T> findRevisions(ID id)方法并从服务层应用过滤器.这是一个例子.
@Service
public UserService {
@Resource
private UserRepository userRepository;
public List
它不是一个完美的选择,因为您将从数据库中获取所有修订版本.但是,这是保持数据库抽象的最简单方法.
否则,您必须跳过Spring Data Envers并使用Envers API.
祝好运,
问候