在项目中,我使用 JPA 和 Hibernate 实现。所有实体都基于注解并列在 persistence.xml 中。
所有实体都打包到 jar 中。
我需要为几个属性(在所有实体中)定义一个 typedef,这些属性是枚举类型的字符串。在 DB 中,列是 varchar。我怎样才能做到这一点?
我可以通过添加 hbm.xml 和 hibernate-cfg.xml 来实现这一点吗?
提前致谢。
直接来自文档:
@org.hibernate.annotations.TypeDef 和 @org.hibernate.annotations.TypeDefs 允许你声明类型定义。这些注释可以放在类或包级别。请注意,这些定义对于会话工厂是全局的(即使在类级别定义时也是如此)。如果该类型用于单个实体,您可以将定义放在实体本身上。否则,建议将定义放在包级别。
如果您不能更改类但可以更改休眠配置,我认为您可以将 hibernate.mapping.precedence 更改为“hbm,class”,然后在相关类的注释中添加带有所有信息的 hbm 文件。有 hbm 语法来指定 UserType 或 EnumType。如果使用它,您还必须定义您的 UserType 类。
在接受我的话之前,您可能想在测试项目上尝试一下,我假设它会起作用,但我不确定。
将所有持久性信息从注释复制到 hbm 可能会很痛苦,并且会重复信息。如果可能,尝试找到一种方法将注释添加到类本身。