2009-01-27 65 views
1

问题如何使用Hibernate

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

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

如果它只是一个更新xml的问题,(我很确定代理类是必需的),那么架构如何重新加载?

感谢输入

注百万:如果你想有更好的解决办法,我也可为M所有的耳朵感谢

回答

1

我不认为这是一个非常常见的用例,因为亚伦表示它会花费你很长一段时间来指出这一点。

模式更新也不是简单的。即使认为Hibernate确实提供了程序化模式更改,但它仅限于简单的事情,如添加/删除字段。这可能适合你,但是如果数据类型或列的可空性发生变化,Hibernate将不会为你更新它。

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

0

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

  • 下载的Hibernate源
  • 查找它加载XML配置

你会看到,它创建包含表定义一个类的类。请注意涉及的字段名称和类型。如果该字段是私密的,那么Field.setAccessible(true)是你的朋友。

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

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