使用hibernate和cache缓存的值

时间:2013-03-10 10:47:18

标签: java hibernate caching second-level-cache

我有下一个问题: 我有一个“用户”实体与“角色”有很多关系。问题是,“角色”是枚举的(总共有5个),所以每当我获取用户时取出它们似乎都是不必要的(因为它们也很少改变)。我想以某种方式将角色保存在内存中,并在我带她时将它们附加到用户身上。值得注意的是,hibernate启用了二级缓存,因此我可以在必要时使用它。 有人有解决方案吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您可以更改数据模型,请删除表角色并将多对多表转换为带有用户外键的简单多对一表,以及包含该角色的列(作为varchar或者作为数字,但我建议使用varchar,因为它更容易维护)。然后,您可以将此表映射如下:

@Entity
public class UserRole {
    @ManyToOne
    private User user;
    @Column
    @Enumerated(EnumType.STRING) // depends if column is varchar or number
    private Role role;
}

public enum Role { ROLE1, ROLE2, ROLE3, ROLE4, ROLE5 }

请注意,如果不删除角色表,只要角色ID为0到4,就可以使用EnumType.ORDINAL映射(这是默认值)来执行此操作。如果它们是1到5,请在Role枚举的开头添加一个虚拟角色。