是否有可能让Hibernate(3.6)使用给定枚举的值填充数据库表?我有以下课程:
@Entity
public enum Role
{
ROLE_USER_FREE("ROLE_USER_FREE"),
ROLE_USER_STANDARD("ROLE_USER_STANDARD"),
ROLE_USER_PREMIUM("ROLE_USER_PREMIUM"),
ROLE_ADMIN("ROLE_ADMIN");
... constructor / setter / getter etc.
}
Run Code Online (Sandbox Code Playgroud)
我可以使用这个枚举而没有任何其他实体类使用的问题
@Enumerated(EnumType.STRING)
public Role getRole()
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何自动填充相应的表ROLE?所有底层逻辑和定义都存在于XML规范中.当然,我可以通过XSL从这个规范生成一个sql文件,并让Hibernate在启动时通过import.sql sematic导入它...但是有更优雅的方式吗?
该表应如下所示:
|RoleID|RoleName |
| 0 |ROLE_USER_FREE|
....
Run Code Online (Sandbox Code Playgroud)
你必须选择一方 - 你要Role用作枚举或实体.你试图做到这两点,这只会导致路上的麻烦.
如果你想使用枚举
@Entity从中删除注释Role.它不是一个实体,它没有主键.它也不应该是可变的,因此坚持它没什么意义.Roles从数据库中删除(或其所谓的)表.Hibernate按名称(如果您正在使用@Enumerated(EnumType.STRING)映射)或通过values()数组中的索引(如果您正在使用@Enumerated(EnumType.ORDINAL)注释)持久保存枚举.无论哪种方式,它都不会引用您的附加表.随着你的映射(@Enumerated(EnumType.STRING)),必须RoleID开始是没有意义的.如果要使用实体
Role一个真正的实体 - 带有getter/setter和identifier的POJO.根据您的需要,它可能是也可能不是可变的.@ManyToOne从其他表中引用它.