如何在使用hibernate时动态添加字段

时间:2009-01-27 16:05:49

标签: hibernate

问题

使用Hibernate动态添加和删除实体字段。

我确信这是一种常见的情况,大多数企业应用程序都需要一定程度的自定义。那么最好的方法是什么?理想情况下,它不应该需要重新编译并平滑地创建/删除模式中的字段,并允许应用程序继续工作。

如果只是更新xml的问题,(我非常确定需要代理类)那么架构是如何重新加载的?

感谢百万输入

注意:如果您认为有更好的解决方案,我也非常感谢

2 个答案:

答案 0 :(得分:1)

我认为这不是一个非常常见的用例,而且Aaron建议你要花很长时间来解决这个问题。

架构更新也不会直截了当。即使Hibernate确实提供了程序化架构更改,它也仅限于添加/删除字段等简单的事情。这可能对您有用,但如果列的数据类型或可为空性发生变化,Hibernate将不会为您更新它。

您可能需要考虑OneToMany关系并将数据作为一行存储在单独的表中,假设您可以接受另一个连接的开销。

答案 1 :(得分:0)

我做了一次(挖掘我的记忆)。好的。这样做:

  • 下载Hibernate源代码
  • 查找加载XML配置的类

您将看到它创建了一个包含表定义的类。请注意涉及的字段名称和类型。如果字段是私有的,则Field.setAccessible(true)是您的朋友。

您需要做的是查询全局配置类以获取表列表,找到您的表,然后修改字段列表。问题始于将这些字段映射到某个类,因为您无法在运行时更改Java类。

由于这非常复杂,这里有一个更简单的方法:使用所有字段创建Hibernate映射,然后使用自定义查询仅加载子集。您可以使用HQL在运行时轻松创建此类查询。只指定你需要的列,Hibernate不会尝试加载其余的列。