通常在创建Model时使用Java EE,我们在编译之前通过XML或注释定义字段和字段类型。有没有办法在运行时更改它们?或者更好的是,是否可以在运行时根据用户的输入创建新模型?这样,列数和字段类型是动态的(在运行时确定)?
非常感谢帮助。谢谢。
我觉得有必要澄清自己。
是的,在谈到模型时,我的意思是数据库建模。
至于用例,我想为用户提供一种定义和创建自己的表的方法。无需灵活性。但是必须有一定程度的自由:例如用户可以定义描述其产品所需的字段。
答案 0 :(得分:2)
您听起来希望能够在运行时根据用户输入更改对象和架构。这听起来像是一个混乱的灾难食谱给我。我从来没有见过它。
我已经看到了将外键关系结合到名称/值对的通用表中的一般模式,但是这些抽象往往变成无限灵活的抽象,在性能方面既不容易理解也不能以自己的方式摆脱。< / p>
我打赌你的用户真的不想要无限的灵活性。我告诫你不要采取这个方向。更好地直接了解您的实际用例。
当然,一切皆有可能。我的直接经验告诉我,如果你能把它拉下来,你的用户会讨厌这个坏主意。祝你好运。
答案 1 :(得分:1)
这在某种程度上可能使用元建模技术:
但是这有明显的局限性(缺乏强类型对象)并且恕我直言会很快变得非常复杂(甚至不确定如何处理关系)。我不会使用这种方法来完全定义域对象,而只是扩展现有的对象(产品,文章等)。
如果我记得很清楚,这就是一些电子商务解决方案(例如BroadVision)正在做的事情。
答案 2 :(得分:1)
我在一个我们有这种设施的系统上工作。为了保持高效,我们将为客户架构动态生成/更改表。我们还需要嵌入元模型(模型模型)来动态处理实体中的信息。
选项1:使用自定义表格,您可以获得充分的灵活性,但同时也会显着增加复杂性,尤其是现有数据的更新/迁移。以下列出了您需要考虑的事项:
选项2:轻量级替代方案是在不同类型的业务表中添加一些“备用”列(例如:“USER_DATE_1”,“USER_DATE_2”等)我见过那几次。它会让你的DBA尖叫,并不是一个好的做法,但至少可以促进一些事情,例如(迁移脚本,ORM集成)。
选项3:另一种选择是将所有内容存储在具有结构属性/数据的表中。但是,这对数据库性能来说确实是一场灾难。任何不完全微不足道的东西都需要很多连接。 DBA会尖叫得更多。
选项4:它是选项2和3的混合。核心表是固定的,但可以使用带有属性/数据的表以某种方式扩展它们。
总结:在你走这条路之前要三思而后行。它可以完成,但对应用程序的设计和维护有重大影响。
答案 3 :(得分:0)
我想我自己找到了一个很好的答案。那些新的no-sql(hbase,cassandra)数据库似乎正是我想要的。谢谢大家的答复。