gpt4 book ai didi

java - 在运行时扩展 JPA 实体数据

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:00 24 4
gpt4 key购买 nike

我需要允许客户端用户在运行时扩展 JPA 实体包含的数据。换句话说,我需要在运行时向实体表添加一个虚拟列。此虚拟列 仅适用于某些数据行,并且可能有相当多的虚拟列。因此,我不想在数据库中创建一个实际的附加列,而是想利用代表这些虚拟列的附加实体。

例如,请考虑以下情况。我有一个 Company 实体,它有一个标记为 Owner 的字段,其中包含对 CompanyOwner 的引用.在运行时,客户端用户决定属于特定所有者的所有公司都应该有标记为ContactDetails的额外字段。

我的初步设计使用了两个额外的实体来实现这一点。第一个基本上表示虚拟列 并包含字段名称和预期值类型等信息。另一个表示实际数据并将实体行连接到虚拟列。例如,第一个实体可能包含数据“ContactDetails”,而第二个实体包含“555-5555”。

这样做是否正确?有更好的选择吗?另外,加载原始实体时自动加载此数据的最简单方法是什么?我希望我的 DAO 调用返回实体及其扩展

编辑:我将示例从标记为 Type 的字段(可能是 PartnerCustomer)更改为当前版本令人困惑。

最佳答案

也许更简单的替代方法是向每个公司添加一个 CLOB 列并将扩展存储为 XML。与您的解决方案相比,这里有一组不同的权衡,但只要不需要 SQL 访问额外的数据(没有索引、fkeys 等),它可能会比您现在所做的更简单。

这也意味着,如果您对额外数据有一些奇特的逻辑,则需要以不同的方式实现它。例如,如果您需要所有可能的扩展类型的列表,您将不得不单独维护它。或者,如果您需要搜索功能(通过电话号码查找客户),您将需要 lucene 或类似的解决方案。

如果你有兴趣,我可以详细说明。

编辑:

要启用搜索,您需要像 lucene 这样的东西这是对任意数据进行自由文本搜索的强大引擎。还有hibernate-search它使用注释等将 lucene 直接与 hibernate 集成 - 我没有使用过它,但我听说过关于它的好消息。

对于获取/写入/访问数据,您基本上是在处理 XML,因此任何 XML 技术都应该适用。最佳方法实际上取决于实际内容及其使用方式。我建议调查 XPath用于数据访问,并可能考虑定义您自己的 hibernate usertype这样所有的访问都被封装到一个类中,而不仅仅是普通的字符串。

关于java - 在运行时扩展 JPA 实体数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com