Задать вопрос
@lookingfor

Можно ли описать связь один ко многим c возможностью изменять поле с внешним ключом?

Стандартное описание связи один ко многим средствами jpa выглядит как-то так (для примера)

public class User {
        .......
        @ManyToOne
        @JoinColumn(name="group_id")
        Group group;
        .......
    }

public class Group {
        @OneToMany
        Set<User> users;
    }


Соответственно чтобы добавить юзера в группу нужно выполнить след. код

user.setGroup( group );

Мне же нужно, что-то наподобии такого

public class User {
        @ManyToOne
        @JoinColumn(name="group_id")
        long groupId;
    }


в коде это будет выглядеть вот так

user.setGroupId( id );

Т. е нужна возможность напрямую менять поле с внешним ключом.

Можно ли описать подобную конструкцию и использовать ее, или такой подход не может быть использован?

Дополнение:

В вопросе рассматривалось возможность генерации структуры бд хибернейтом. Пришли к выводу что так сделать не получится. Решение есть в комментариях.
  • Вопрос задан
  • 2965 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@bobzer
Java EE Developer
Несмотря на то, что на объектном уровне Hibernate требует объект Group, на самом деле ему для корректного сохранения в БД нужен лишь group_id. Можно создать пустой/фейковый (не считанный из БД) экземпляр Group и указать ему нужный вам group_id. После этого его можно смело передавать в user.setGroup(group); Если количество групп в Системе ограничено и все они известны заранее (подтекст вопроса это подразумевает), то можно хранить как константы экземпляры Group с заполненным полем ID.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
CTAKAH4uK
@CTAKAH4uK
Такой вариант не подходит?
user.setGroup( GroupDAO.getGroupById(groupId) );
Можно попробовать так :
public class User {
        .......
        @ManyToOne
        @JoinColumn(name="group_id")
        Group group;
        .......
       @Basic
       @Column(name= "group_id")
        long groupId;
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы