0

我必须开发一个使用 un DB 的应用程序,并且以这种模式构建:

  1. 有元数据表(文档类型,文档属性...)
  2. 从元数据表开始创建/修改(也在运行时的正常应用程序生命周期中)元数据表。

IE:如果我创建一个新的文档类型,在名为“文档类型”(合同、发票、注释..)的 METADATA 表中插入一条新记录,则新的相关 DATA 表将创建到数据库中。该表具有我在另一个 METADATA 表(文档属性)中定义的属性作为列。

我想使用 ORM 来映射元数据表,因为它们不会在运行时改变结构。是否可以映射数据表?我也想为数据表使用 POJO。

我认为在运行时创建类是不可能的(反射是可能的,但这是最好的选择吗?)并修改它们的结构。

这可能是 CMS 和 CRM 使用的逻辑/问题。

你有什么建议你对如何构建我的应用程序有什么建议吗,特别是对于 ORM / DB?

谢谢

4

2 回答 2

0

用这么少的信息很难提供好的建议。但是,您包含“JCR”标签,听起来您的用例类似于内容或文档管理系统,因此您绝对应该考虑 JCR。请参阅“何时使用 JCR 而不是其他选项?” 以获得更一般的响应,但我将尝试描述它对您的特定用例的好处。(不过,始终选择最适合工作的工具。)

也许 JCR 对您来说最好的特性是能够拥有一个灵活的模式,它允许您随着时间的推移为不同的文档添加(或更改)元数据。您可以限制属性以确保您的应用程序仅添加可接受的信息,或者您可以选择稍微宽松一些并保持选项开放以根据需要添加其他元数据。您甚至可以将元数据分解为“特征”,这些“特征”可以通过 mixins 添加到各个节点。简而言之,JCR 在设计数据结构时为您提供了极大的灵活性,同时为您提供了几个旋钮来控制您使用多少强制/灵活性。

使用 JCR 存储库还可以让您将元数据与文档一起保存(如果需要;您可以随时将它们分开)。而且,如果您的应用程序使用读取文档然后获取元数据的访问模式,这可能会给您的应用程序带来出色的性能。导航通常比查询快得多。

第三,许多 JCR 存储库甚至支持查询存储库内容(通过将节点类型映射到类似关系表的结构中)。JCR 2.0 有多种语言,包括 XPath 和一种称为“JCR-SQL2”的类似 SQL 的语言。

JCR 有一些对象映射库,但它们很可能会阻碍真正利用 JCR 的数据结构灵活性。JCR 本身是一个 Java API,它内置了对事件、安全、查询、锁定、版本控制等的支持。

如果您确实查看了 JCR,请务必查看不同的实现,包括JackrabbitModeShape。它们各自提供不同的东西(例如,Jackrabbit 是参考实现,而 ModeShape 提供了一些扩展和附加功能,例如扩展查询语言和排序;请参阅这个相关问题)。

于 2012-05-22T17:56:04.763 回答
0

JPA 和 eclipseLink 可能是我的选择。

您有点处于以下位置:使用可由组织 (CMS) 在线编辑的业务逻辑开发的 Web 应用程序,例如使用规则引擎。非常通用,听起来不错,降低了开发成本。但是:更改现在无法测试,无法放入版本控制,立即生效。没有调试,没有编译器智能和错误消息,没有清理(如代码清理)。事实上,这样的系统存在相当大的质量风险和维护成本。

在您的情况下,您需要非常强大的工具:版本控制、单独的登台服务器、可控逻辑、报告(模型和交互的自动文档)。

JPA 原则上可以从实体(或相反)创建数据库表本身。所以这是一层。它维护一个元模型。

源自您的元模型,您确实需要做一些聪明的事情。

最简单、最容易实现的方法是只保留您的元模型并定义版本控制等。手动代码将使用 Map 之类的通用数据。您也可以将代码存储在数据库中,对其进行版本控制,并使用 Java Scripting API。但是您需要通知管理层,并确信可行性 - 创建一个原型。

我绝对希望有人知道更好的解决方案。

附言

也许 NoSQL 数据库会是什么东西,它看起来有点像文档数据库。

于 2012-05-22T17:04:40.610 回答