вопрос о спящих аннотациях - PullRequest
1 голос
/ 04 января 2011

У меня есть 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 ]

2 голосов
/ 04 января 2011

Используя аннотации, вам нужно определить правильный класс для вашего составного идентификатора и аннотировать его как @Embeddable. (С XML можно сопоставить составной идентификатор без явного класса идентификатора.) Вот пример , использующий внутренний класс в качестве составного идентификатора, и другой, с классом идентификатора верхнего уровня .

0 голосов
/ 04 января 2011

Как бы я поступил:

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

    }
0 голосов
/ 04 января 2011

нет.Вы можете использовать @Id только в примитивах.Но вы можете использовать @ComposeId или @IdClass (что-то в этом роде, теперь не можете получить доступ к hibernate doc ...) и отобразить пользователя как составной идентификатор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...