问题标签 [datahistory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Hibernate:有没有办法以编程方式创建类似于现有表的新表?
我有一个有很多表的网络应用程序(每个表代表一个 POJO)。我为每个类编写了映射文件,然后使用 HibernateSchemaExport
在我的数据库中生成表。现在我想为每个已创建的现有表创建 2 个附加表:
- 用户权限表- 存储用户对 POJO 的权限,特定于每个字段
,每一列代表 POJO 中的一个字段,每一行代表一个用户,每个单元格将有一个值“读取”、“写入”等,代表用户对 POJO 的权限场地 - 数据历史表- 使用版本号存储所有数据历史记录,
该表将包含 POJO 表具有的所有列,并带有 4 个附加字段:数据对象版本、事务 GUID(主键)、数据戳和执行此事务的用户。
我希望能够在创建这些表后通过 Hibernate 访问它们。这样我就可以轻松地在其中添加/删除/更新条目。
我的问题
附加表上的大多数列将与 POJO 表相同。所以我认为以某种方式引用 POJO 表而不是创建全新的表可能会更好。这样,如果 POJO 表中添加了新字段,这些表将自动进行更改。但我似乎不知道该怎么做。我想也许有一些方法:
- 创建以某种方式引用 POJO 表的休眠映射文件,
例如在我的新 POJOPermission.hbm.xml 文件中,以某种方式指定,使用与 POJO 表相同的字段,并添加这些新字段。 - 编写 Java 代码以在 Hibernate 中创建表,
例如我可以使用 java.lang.Class 返回 POJO 中所有字段的列表,然后遍历这些字段,以某种方式将它们设置为我的新表的列标题,并以某种方式调用Hibernate 在运行时创建这些表
有人可以告诉我如何执行上述任一操作,或者解决此问题吗?我有一种感觉,我可能以错误的方式思考这个问题......
谢谢!!!
[编辑 - 解决方案]
我最终使用 XSLT 将原始 hbm.xml 文件转换为新文件,更改字段类型等。并指定 hibernate.cfg.xml 文件以包含新生成的文件。最后只需运行 schemaexport 即可生成所有 java 文件...
java - 为基于 Hibernate 的应用程序实现数据历史记录/版本控制解决方案(稍加改动)
首先是基本事实:Java webapp、Spring、Hibernate、MySQL。
情况是我有一个复杂的对象模型,例如Car。它由许多对象(引擎、轮胎……)组成,它们之间具有多对一和一对多的关系。
现在有很多汽车,不时有人检查汽车并创建检查报告。报告是指汽车的许多部件,显示它们的属性等。
到目前为止,该系统还不支持在将汽车及其部件的属性输入系统后对其进行更新的能力。这意味着如果底盘颜色或轮胎数量发生变化,旧报告将反映这种变化,这不是我们想要的。
好吧,现在这个功能已经被请求了。汽车及其零件需要可修改,并且必须创建版本历史。旧报告需要参考旧版本的零件及其值。
我一直在研究“缓慢变化的尺寸”,似乎汽车及其零件的版本控制可以通过 Type 6 方法完成。
我无法弄清楚的事情(扭曲)(可能是由于我有限的 Hibernate 经验)是这样的:
如何使用 Hibernate 组装我的 Report 实例,以便它们引用汽车每个部分的正确版本?这些报告有一个日期,并且每个版本的汽车零件在有效时都会有日期范围,所以我想我可以使用一些复杂的 HQL/SQL 来完成。但是有没有更简单、更自动化的方式来使用 Hibernate 呢?
sql - 如何创建历史事实表?
我的数据仓库中有一些实体:
Person - 具有 personId、dateFrom、dateTo 和其他可以更改的属性,例如姓氏、出生日期等 - 缓慢变化的维度
文档- documentId、编号、类型
地址- addressId、城市、街道、房屋、公寓
(Person and Document) 之间的关系是一对多的,(Person and Address) 是多对多的。
我的目标是创建可以回答我们以下问题的历史事实表:
- 哪些人在指定日期住在指定地址?
2、指定地址在指定时间间隔内有哪些居民历史?
这不仅是针对 DW 设计的,而且我认为这是 DW 设计中最难的事情。
例如,personId=1 的 Brown 小姐、documentId=1 和 documentId=2 的文档从 01/01/2005 到 02/02/2010 一直居住在 addressId=1 的地址,然后移动到 addressId=2 的地址。从 2010 年 2 月 3 日到当前日期(NULL?)。但自 2006 年 4 月 5 日起,她已将姓氏更改为格林夫人,自 2007 年 6 月 7 日以来,她的第一个 documentId=1 文档更改为 documentId=3。自 2010 年 2 月 3 日至今,具有 personId=2、documentId=4 的 Black 先生一直居住在 addressId=1。
我们查询问题 2(其中 addressId=1,时间间隔是从 2000 年 1 月 1 日到现在)的预期结果必须如下:
行:
我有一个想法用复合键(personId、documentId、addressId、dateFrom)创建事实表,但我不知道如何加载这个表,然后用这个结构得到预期的结果。
我会很高兴得到任何帮助!
javascript - 获取 date_histogram、elasticsearch 的桶平均值
我有以下查询获取 a 数据并创建过去一小时的聚合:
我想从每个小时间隔(聚合创建的每个存储桶)中获取字段的平均值。在这篇文章中,他们谈到了与我想做的类似的事情: http ://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_looking_at_time.html (“我们网站每小时的平均延迟是多少?上周?”)。但是,他们没有确切解释在这种情况下该怎么做。
有谁知道这是怎么做到的吗?
java - 显示大量数据
在 UI 中显示大量数据的一般准则是什么?
我想到的一种方法是最初加载少量记录,然后根据用户输入加载后续记录。
有没有可以学习的资源?这是用Java(后端和客户端)开发的。
sql - 创建一个显示以前费率的列
我正在创建一个显示旧地址的列。每当更新地址时,旧地址将在新地址生效的前一天过期,并且将使用新地址添加具有相同帐号的新行(例如:旧地址将显示:From:10/01 /2020 至:12/31/2021 和新地址从:01/01/2022 至:12-31-9999)。我试图在 SQL 中并排显示每个帐号的旧地址和新地址,但我得到了零。
样本数据
帐号 | 地址 | 有效自 | 有效 |
---|---|---|---|
4895626 | 720主 | 2020 年 10 月 1 日 | 2021 年 12 月 31 日 |
9794651 | 158 第四街 | 2002 年 9 月 29 日 | 2020 年 12 月 19 日 |
4895626 | 第九大道 5986 号 | 2022 年 1 月 1 日 | 9999 年 12 月 31 日 |
期望的结果
帐号 | 地址 | 有效自 | 有效 | 以前的地址 |
---|---|---|---|---|
4895626 | 720主 | 2020 年 10 月 1 日 | 2021 年 12 月 31 日 | 0 |
9794651 | 158 第四街 | 2002 年 9 月 29 日 | 2020 年 12 月 19 日 | 0 |
4895626 | 第九大道 5986 号 | 2022 年 1 月 1 日 | 9999 年 12 月 31 日 | 720主 |