Название столбца внешнего ключа JPA - PullRequest
3 голосов
/ 02 апреля 2011
@Entity
public class User {
    private String mail;
    private String password;

    @OneToMany(mappedBy="user")
    private List<UserGroup> userGroups;
}

@Embeddable
public class UserGroupPK {
    private String mail;
    private String role;
}

@Entity
public class UserGroup {
    @EmbeddedId
    private UserGroupPK id;
    private String field;

    @ManyToOne
    @MapsId("mail")
    private User user;
}

Hibernate создает две таблицы: user (mail, password) и usergroup (user_mail, role, field).

Мне нужно переименовать столбец user_mail в почту. Я пытался добавить @Column(name="mail") в UserGroupPK, но ничего.

1 Ответ

4 голосов
/ 02 апреля 2011

Я думаю, должно работать следующее:

@Entity
public class UserGroup {
    @EmbeddedId
    private UserGroupPK id;
    private String field;

    @ManyToOne(referencedColumnName = "mail")
    @JoinColumn(name = "mail")
    private User user;
}

См. Соответствующий пункт 5.1.7.1. Использование внешнего ключа или таблицы ассоциации в документации по спящему режиму:

Атрибут @JoinColumn является необязательным, значения по умолчанию - это конкатенация имени отношения на стороне владельца, _ (подчеркивание) и имени столбца первичного ключа на стороне владельца. В этом примере [user_mail], потому что имя свойства - [user], а идентификатор столбца [(фактически, referencedColumnName)] для [User] - [mail].

(я заменил значения в скобках [].)

Обратите внимание, что у вашей сущности User нет первичного ключа, что, вероятно, не очень хорошая идея. Чего ты пытаешься достичь?

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