单页应用程序,它是用角度JS开发的。我只想根据用户与数据库的交互了解前端时间线中用户活动的审核。
使用HIBERNATE和带有JERSEY Restful Web服务的控制器层完成数据库层。我想在与hibernate交互时在UI中审核添加,修改,删除等用户操作。
我已经阅读了一些帖子,有人建议使用JPA API进行hibernate审计,有些人建议使用Spring DATA来实现它。我希望当用户与系统交互并将其安排在后端时,将显示审计数据。
帮助我从最好的架构感知,流程或路线图来实现它,并给我一些学习教程。
提前致谢
答案 0 :(得分:0)
基于审计的假设,你的意思是能够跟踪在数据库级别对实体行进行的更改历史记录,然后是的,Hibernate有一个名为Hibernate Envers的扩展,它执行此操作你。
您可以找到有关Envers here
的文档首要问题是,您只需要在类级别或每个属性级别使用@Audited
注释您的实体,在构建EntityManagerFactory
或SessionFactory
时提供一些配置参数org.hibernate.envers.AuditReader
并确保在数据库中创建了相应的表。
修订跟踪开始后,您可以使用using (var client = new SvnClient())
{
var release = SvnTarget.FromUri(new Uri(@"https://******/branches/Release"));
var trunk = SvnTarget.FromUri(new Uri(@"https://******/trunk"));
string trunkMergeinfo, releaseMergeinfo;
client.GetProperty(release, "svn:mergeinfo", out releaseMergeinfo);
client.GetProperty(trunk, "svn:mergeinfo", out trunkMergeinfo);
var relInfos = releaseMergeinfo.Split("\n");
var trunkInfos = trunkMergeinfo.Split("\n");
// This is here because I don't know what will happen once I merge something into trunk.
Debug.Assert(relInfos.Except(trunkInfos).Count() == 1,"Too many unknown merge paths");
var trunklist = relInfos.SingleOrDefault(i => i.StartsWith("/trunk:"));
var revisions = trunklist.Replace("/trunk:", "").Split(",").SelectMany(t =>
{
// If the log contains a range, break it out to it's specific revisions.
if (t.Contains("-"))
{
var match = Regex.Match(t, @"(\d+)-(\d+)");
var start = int.Parse(match.Groups[1].Value);
var end = int.Parse(match.Groups[2].Value);
return Enumerable.Range(start, end - start + 1).ToArray();
}
else
return new[] { int.Parse(t) };
}).Select(x => (long)x);
Collection<SvnLogEventArgs> baseRevs;
// Why can't this take "trunk" or a property thereof as an argument?
client.GetLog(new Uri(@"https://******/trunk"), new SvnLogArgs { Start = 1725, End = SvnRevisionType.Head }, out baseRevs);
baseRevs.Reverse().Where(r => !revisions.Contains(r.Revision) ).Select(x => x.LogMessage).Dump();
}
界面轻松查询审核更改。请参阅文档以了解如何获取此信息。