2012-02-02 60 views
1

我在我的项目中使用了Spring和Hibernate。在休眠状态下手动计算的字段POJO

假设我有一个USER表,通过交叉表与ROLE反过来ROLE表通过交叉表再次与PERMISSION表。所以每个用户可能有多个角色,每个角色可能有多个可能在不同角色之间共享的权限。在ORM我将有一个User类是这样的:

class User { 
    // blah blah properties 

    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
    @JoinTable(name="USER_ROLE", 
     joinColumns={@JoinColumn(name = "USER_ID", nullable = false, updatable = false)}, 
     inverseJoinColumns={@JoinColumn(name = "ROLE_ID", nullable = false, updatable = false)}) 
    private Set<Roles> roles; 
} 

现在我想要的是在包含用户的字符串(List<String> permissions)的权限列表中User豆另一个属性。对我来说最简单的方法就是在属性填充后,可以调用某个User对象的方法。该方法将在角色上执行for,然后在权限上执行另一个角色,并将其添加到用户对象中的权限列表中。

也许冬眠/春天提供了这个确切的情况?

P.S. 我尝试了谷歌搜索,但不成功。

+1

所以,只需要添加一个方法到'用户',这需要这样做。 – skaffman 2012-02-02 12:28:58

+0

我已经这样做了,但是对于我来说这并不够整齐:)我在getter方法中检查权限列表是否为空,如果没有,我就填充它。我认为应该有一个更清洁的解决方案。 此外,我正在使用一个特殊的库,它将hibernate托管的bean转换为可通过网络传输的可序列化bean。这个lib可能会或可能不会使用getter方法来访问bean的私有属性。 – 2012-02-02 12:34:23

+1

@PostLoad生命周期监听器是你想要的吗? http://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html – 2012-02-02 13:22:04

回答

2

我觉得@PostLoad callback会帮助你。它允许您在实体加载后立即进行计算或修改,以便您可以建立权限列表。