Java 关于hibernate注释的问题

Java 关于hibernate注释的问题,java,hibernate,annotations,Java,Hibernate,Annotations,我有两个实体:用户和角色 我有一个类Userrole,它将在user和role之间包含一个复合键 现在Userrole将不包含userId和roleId。。但是对象用户和角色是这样的: public class UserRole implements Serializable{ User user; Role role; 我可以把@Id放在用户身上吗?比如: @Id public User getUser() { return user;

我有两个实体:用户和角色 我有一个类Userrole,它将在user和role之间包含一个复合键

现在Userrole将不包含userId和roleId。。但是对象用户和角色是这样的:

public class UserRole implements Serializable{
    User user;
    Role role;
我可以把@Id放在用户身上吗?比如:

    @Id
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
?否。
您只能在原语中使用@Id。但是您可以使用@ComposeId或@IdClass(类似于这样,现在无法访问hibernate文档…)并将用户映射为您的合成id

使用注释,您需要为您的合成id定义一个适当的类,并将其注释为
@embeddeble
。(使用XML,也可以在没有显式id类的情况下映射复合id。)以下是复合id,以及。

我的做法:

    @Entity
    public class User {
    ...
    @OneToMany
    public Set<UserRoles> getUserRoles() {
            return this.userRoles;
        }
    }

    @Entity
    public class UserRole {
    ...

    @Id 
    @GeneratedValue
    public long getId() {
                   return this.id;
   }

    @ManyToOne
    public Role getRole() {
            return this.role;
        }


    @ManyToOne
    public Role getCategory() {
            return this.category;
        }

    }
@实体
公共类用户{
...
@独身癖
公共集合getUserRoles(){
返回this.userRoles;
}
}
@实体
公共类用户角色{
...
@身份证
@生成值
公共长getId(){
返回此.id;
}
@许多酮
公共角色getRole(){
返回这个角色;
}
@许多酮
公共角色getCategory(){
返回此.category;
}
}