关于hibernate注释的问题

时间:2011-01-04 12:39:30

标签: java hibernate annotations

我有2个实体:用户和角色 我有一个类Userrole,它将包含用户和角色之间的复合键。

现在Userrole不会包含userId和roleId ..但是对象User和Role它看起来像这样:

public class UserRole implements Serializable{
    User user;
    Role role;

我可以将@Id放在用户身上吗?像:

    @Id
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

3 个答案:

答案 0 :(得分:2)

使用注释,您需要为复合ID定义一个合适的类,并将其注释为@Embeddable。 (使用XML,我们也可以映射复合ID而不使用显式的id类。)以下an example using an inner class为复合ID,another one, with a top-level id class

答案 1 :(得分:0)

没有。 您只能在基元中使用@Id。但你可以使用@ComposeId或@IdClass(类似的东西,现在无法访问hibernate doc ...)并将用户映射为你的组合id

答案 2 :(得分:0)

我会这样做:

    @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;
        }

    }