Задать вопрос
DennisKingsman
@DennisKingsman
Студент

Как исправить ошибку с ленивой инициализацией?

У меня есть таблица в которой уже есть юзер, но у него нет машин, я хочу взять этого юзера из таблицы и добавить ему машину, после обновить данные у юзера в таблице и давить в таблицу машин машину(юзера из таблицы он достает успешно)
вот код ошибки :
5cb57f1ed66a2058221507.jpeg
вот main :
public static void main(String[] args) {
        UserService userService = new UserService();
        List<User> users = userService.findAllUsers();
        User user = users.get(0);
        System.out.println(user);
        Auto auto = new Auto("Bugatti", "Black");
        user.addAuto(auto); //вылетает тут 
        userService.updateUser(user);
    }

вот юзер
@Entity
@Table (name = "f_users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int user_id;

    @Column(name = "user_name")
    private String name;

    @Column(name = "user_age")
    private int age;

    //mappedBy --> field in class Auto
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Auto> autos;

    public void addAuto(Auto auto) {
        auto.setUser(this);
        autos.add(auto);
    }
//......

вот авто :
@Entity
@Table(name = "f_autos")
public class Auto {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int auto_id;

    @Column(name = "auto_model")
    private String model;

    @Column(name = "auto_color")
    private String color;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "a_user_id") //a_user_id is foreign key
    private User user;

    public void setUser(User user) {
        this.user = user;
    }
//......

вот если необходимо то, как происходит апдейт
@Override
    public void update(User user){
        Session session = HibernateSessionFactoryUtil.getSessionFactory().openSession();
        Transaction tx1 = session.beginTransaction();
        session.update(user);
        tx1.commit();
        session.close();
    }
  • Вопрос задан
  • 155 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 2
Conacry
@Conacry
Вы можете использовать Hibernate.initialize().

Hibernate.initialize(user.getAutos);
user.addAuto(auto);

Это позволит явно проинициализировать прокси-объект. Если у вас будут дополнительные вопросы, пишите, буду рад помочь.
Ответ написан
@morecore1337
Пропробуй добавить сеттер и геттер для коллекции 'autos' класса User
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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