Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring security, mapping User и Role 
:(
    Опции темы
4epT
Дата 17.5.2011, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Доброе утром всем) Делаю авторизацию на сайте через Spring Security. Класс отвечающий за авторизацию написал ... возникли небольшие проблемы с мапингом. Сейчас сделано вот так:

Код

public class User {

....

@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

@OneToMany(cascade=ALL, targetEntity=Roles.class, mappedBy="user", fetch=FetchType.EAGER )
private List<Role> roles;

...
}


Код

public class Roles{

....

@ManyToOne
@JoninColumn(name="user_id")
private User user;

}


Данный вариант не работает, ругается что не правильный маппинг. Подскажите где я ошибся =)

И еще есть вариант переписать с использованием @CollectionOfElements. То есть будет как то так:

Код

public class User{

...

@CollectionOfElements
public List<Role> getRoles(){

return roles;

}
}


Код


@Embeddable
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "role", propOrder = {
    "role", "title"
})
public class Role{

private String role;
private String title;
}


Какой вариант предпочтительней ? Может у кого то есть уже готовые "красивые" варианты ?) буду благодарен!





PM MAIL   Вверх
MisterCleric
Дата 17.5.2011, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет. 
Вообще мепинг у тебя однозначно не правильный должно быть так:
Код

@Entity
public class User {

 @ManyToMany
    @JoinTable(name = "USERROLELINK",
            joinColumns = @JoinColumn(name = "USERID"),
            inverseJoinColumns = @JoinColumn(name = "ROLEID"))
    private List<Role> roles;

}


Т.е. у тебя есть еще третья таблица, которая хранит связь user-roles.
Ведь может же один user иметь несколько ролей. И с другой стороны - одной роли могут принадлежать несколько users. 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 17.5.2011, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Во, то что нужно ... у меня структура БД была изначально так и построена ... через таблицу RoleCasts были связаны роли и юзеры, но не знал то можно делать такой мапинг. 
Единственное хотелось бы уточнить...
Цитата

@Entity
public class User {
 @ManyToMany
    @JoinTable(name = "USERROLELINK",
            joinColumns = @JoinColumn(name = "USERID"),
            inverseJoinColumns = @JoinColumn(name = "ROLEID"))
    private List<Role> roles;
}



Тут @JoinTable(name = "USERROLELINK" - это имя энтити которое отвечает за связь, следующие два параметра "USERID" и "ROLEID" - это поля из того самого энтити. Я правильно понял ?

Если не сложно приведи пожалуйста мапинг таблицы USERROLELINK и Role =)
PM MAIL   Вверх
MisterCleric
Дата 17.5.2011, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



В том той дело, что меппинга таблицы USERROLELINK у меня нет. 
Это в чистом виде реализация в БД связи многие-ко-многим. Она просто содержит внешние ключи на Users & Role, а "USERID" и "ROLEID" это как раз имена этих колонок, которые в свою очередь ссылаются на users.id & role.id соответственно.
Маппинг таблицы Role очень простой: id & name.



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 17.5.2011, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Значит мапинг делается только для таблицу User ?

Тогда я вообще не понимаю как вообще хибер вытащит роли для юзера, если нигде не указано что ROLEID как то связано с id из таблицы Role ...
PM MAIL   Вверх
MisterCleric
Дата 17.5.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Ясно.
Вот такой маппинг:
Код

@Entity
public class Role {
 
@Id
private Long id;

private String name;

}



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 17.5.2011, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Это я понял =) спасибо большое) сегодня сделаю так .. =)

А со стороны БД должны быть настроены как то foregin key ?
PM MAIL   Вверх
MisterCleric
Дата 17.5.2011, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Однозначно должны.
Это же БД. Твоя таблица "многие-ко-многим" должны иметь внешние ключи на те таблицы, которые она связывает


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 17.5.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Цитата(MisterCleric @ 17.5.2011,  11:23)
Однозначно должны.
Это же БД. Твоя таблица "многие-ко-многим" должны иметь внешние ключи на те таблицы, которые она связывает

Вот теперь я точно понял как это все работает) спасибо большое!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0762 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.