2

只是想知道 Hibernate 是否支持实体中静态属性和动态属性的组合。例如

public class User
{  
  private Long id;  
  private String first_name;  
  private String last_name;  
  private Map<String,Object> dynamicProperties;  
}

我可以通过在运行时从 Db 读取用户表的元数据来获取动态属性。基本上我正在开发一种支持多个客户端的产品。

对于一个客户端,用户表只能有像id,这样的列first_namelast_name而对于另一个客户端,用户表需要存储两个附加列,比如DOBTitle

考虑到所有客户端id之间first_namelast_name通用属性集,我将它们用作静态属性和休息,我计划将其作为地图存储在实体中。不确定冬眠是否支持这一点。

约束是代码只在运行时知道动态属性列。

4

2 回答 2

0

我认为您的映射策略需要考虑。在休眠中,您希望您的架构是静态的。我建议将 dynamicProperties 重命名为 metaData 并使映射具有字符串键和字符串值,然后将其作为映射属性包含在您的休眠映射文件中。在hibernate中拥有一个映射的通用对象值的映射没有意义。另一种选择是将地图标记为@transient,但我认为第一个建议更有意义。您需要特定于客户端的元数据,因此将其映射为架构的一部分。

于 2012-12-19T01:57:42.923 回答
0

我正在从事的项目正是这样做的(动态的,每个客户端的模型)。但是,我们不会尝试在同一行上混合静态(基于类)和动态实体。您可以通过将模型的静态部分与动态部分分开并将静态部分与类和动态部分映射到 EntityMode.MAP 实体来轻松地做您想做的事情。我已经为 Hibernate 4.1 提交了一个补丁,它允许您将 JPA 条件查询与 EntityMode.MAP 一起使用。这使得动态查询生成更加简单。

于 2013-02-26T15:15:09.410 回答