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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OneToMany без PK, TopLink 
:(
    Опции темы
ShurikA
Дата 20.7.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

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



Есть две таблицы User и Roles.
В таблице User есть единый PK.
Таблица Roles состоит цобственно только из Composite PK.

Roles entity
Код

@Entity
@Table(name = "Roles", catalog = "organization", schema = "")
public class Roles implements Serializable {

    @EmbeddedId
    private RoleId id;
    private Integer userId;
    private String rolename;

    public String getRolename() {
        return rolename;
    }

    public void setRolename(String rolename) {
        this.rolename = rolename;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Roles)) {
            return false;
        }
        Roles other = (Roles) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "auth.usr.Authority[id=" + id + "]";
    }
}


User Entity:
Код

....
@OneToMany(fetch = FetchType.EAGER, targetEntity = Roles.class, mappedBy = "userId")
private Set<Roles> roles;
...


Вроде всё по правилам. Но нет, у меня гладко быть не может...
Код

Exception Description: An incompatible mapping has been encountered between [class auth.usr.SystemUser] and [class auth.usr.Roles]. This usually occurs when the cardinality of a mapping does not correspond with the cardinality of its backpointer.


Что я пропускаю?

Добавлено через 1 минуту и 45 секунд
Извиняйте, тему написал не правильно...


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
MisterCleric
Дата 20.7.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

@OneToMany(fetch = FetchType.EAGER, targetEntity = Roles.class, mappedBy = "userId")

Разве у тебя User Entity типа Integer?
mappedBy предназначен для bidiraction, т.е. если обе сущности имеют ссылку друг на друга.

У тебя же есть только ссылка у Юзера на его Роли. То что роль имеет форинг кей на юзера еще не показывает, что роль в твоей модели ссылается на юзера. 
Должно быть так:
Код

@OneToMany
@JoinColumn(name = "userId")
private Set<Roles> roles;



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


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

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



Цитата(MisterCleric @  20.7.2009,  14:16 Найти цитируемый пост)
@OneToMany
@JoinColumn(name = "userId")
private Set<Roles> roles;

по моему ты не совсем прав:
Код

Exception Description: @OneToMany for attribute name [roles] in entity class [class auth.usr.SystemUser] should not have @JoinColumn(s) specified. In the case where the @OneToMany is not mapped by another entity (that is, it is the owning side and is uni-directional), it should specify (optional through defaulting) a @JoinTable.


На сколько я понимаю тут нужно пользоваться @JoinTable внутри которого будет @JoinColumn.
Что то типа такого:
Код

    @OneToMany
    @JoinTable(
        name="Roles",
        joinColumns=@JoinColumn(name="userId")
    )
    private Set<Roles> roles;


Прав?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
MisterCleric
Дата 21.7.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



И еще раз привет.
Ну раз требует так по иксепшену, то значит надо.
а вообще-то ну вообще какое-то странное поведение...
Можешь показать структуру своих таблиц: примари кеи, форинг кеи.
Может надо нормализацию базы сделать? я не давно тут подымал такой вопрос, по поводу того, что ненормализованная база приводит к каким-то затруднениям что при мепинге, что при CRUD-операциях


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

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

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


 




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


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

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