我有下一个问题:我有一个与“角色”有多对多关系的“用户”实体。问题是,“角色”是枚举的(总是有 5 个),所以每当我获取用户时获取它们似乎是不必要的(因为它们也很少改变)。我想以某种方式将角色保存在内存中,并在我带她时将它们附加给用户。值得注意的是,休眠启用了二级缓存,因此我可以在必要时使用它。有人对此有解决方案吗?
提前致谢
我有下一个问题:我有一个与“角色”有多对多关系的“用户”实体。问题是,“角色”是枚举的(总是有 5 个),所以每当我获取用户时获取它们似乎是不必要的(因为它们也很少改变)。我想以某种方式将角色保存在内存中,并在我带她时将它们附加给用户。值得注意的是,休眠启用了二级缓存,因此我可以在必要时使用它。有人对此有解决方案吗?
提前致谢
如果您可以更改数据模型,请删除表角色并将多对多表转换为简单的多对一表,其中包含用户的外键和保存角色的列(作为 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
映射(这是默认设置)执行此操作。Role
如果它们是 1 到 5,则在枚举的开头添加一个虚拟角色。