Java 如何使用ehcache缓存具有不属于对象的密钥的对象?

Java 如何使用ehcache缓存具有不属于对象的密钥的对象?,java,hibernate,ehcache,second-level-cache,Java,Hibernate,Ehcache,Second Level Cache,我对ehcache还相当陌生,据我所知,在方法级别上,缓存正在处理要缓存的对象的id。然而,我有一个不同的情况 我有一个用户类和一个角色类,它们之间的关系是多对多的,并通过ids存储在另一个表中 public class User{ @Id @Column(name="ID") @GeneratedValue(generator="idGenerator",strategy = GenerationType.SEQUENCE) private Long id;

我对ehcache还相当陌生,据我所知,在方法级别上,缓存正在处理要缓存的对象的id。然而,我有一个不同的情况

我有一个用户类和一个角色类,它们之间的关系是多对多的,并通过ids存储在另一个表中

public class User{
    @Id
    @Column(name="ID")
    @GeneratedValue(generator="idGenerator",strategy = GenerationType.SEQUENCE)
    private Long id;

    ...

    @ManyToMany(targetEntity = Role.class, fetch = FetchType.EAGER)
    @JoinTable(name = "ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") })
    protected Set<Role> roles;

    ...

}


public class Role{
    @Id
    @Column(name="ID")
    @GeneratedValue(generator="idGenerator",strategy = GenerationType.SEQUENCE)
    private Long id;

    ...

    @ManyToMany(targetEntity = User.class)
    @JoinTable(name = "USER", joinColumns = { @JoinColumn(name = "ROLE_ID") }, inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
    protected Set<Role> roles;

    ...

}
公共类用户{
@身份证
@列(name=“ID”)
@GeneratedValue(generator=“idGenerator”,strategy=GenerationType.SEQUENCE)
私人长id;
...
@ManyToMany(targetEntity=Role.class,fetch=FetchType.EAGER)
@JoinTable(name=“ROLE”,joinColumns={@JoinColumn(name=“USER\u ID”)},inverseJoinColumns={@JoinColumn(name=“ROLE\u ID”)})
受保护的集合角色;
...
}
公共阶级角色{
@身份证
@列(name=“ID”)
@GeneratedValue(generator=“idGenerator”,strategy=GenerationType.SEQUENCE)
私人长id;
...
@ManyToMany(targetEntity=User.class)
@JoinTable(name=“USER”,joinColumns={@JoinColumn(name=“ROLE\u ID”)},inverseJoinColumns={@JoinColumn(name=“USER\u ID”)})
受保护的集合角色;
...
}
只需提及,没有这样的UserRole域类

服务方式是这样的

public RoleService{

    @Cacheable
    public Set<Role> getUserRoles(Long userId)
    {
        ...
    }
}
公共角色服务{
@可缓存
公共设置getUserRoles(长用户ID)
{
...
}
}

问题是,在服务级别上,我希望根据每个用户ID缓存角色。如何使用用户id缓存角色?

如果使用ehcache对spring进行方法缓存,它应该是现成的

<ehcache:annotation-driven cache-manager="ehCacheManager" />

@Cacheable(name="getUserRoles", key="userId")

@可缓存(name=“getUserRoles”,key=“userId”)