Hibernate много к одному признаку является нулем, сохраняясь идентификатором - PullRequest
0 голосов
/ 11 июня 2018

У меня есть следующие отношения один ко многим:

@Entity
class User {
    @Id
    @Column(name = "id_user", nullable = false)
    private Integer idUser
    // Other attribute
}

@Entity
class Car {
    @Id
    @Column(name = "id_car", nullable = false)
    private Integer idCar

    @Column(name = "id_user", nullable = false)
    private Integer idUser

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_user", referencedColumnName = "id_user", nullable = false, insertable = false, updatable = false)
    private User user
    // Other attributes
}

При создании car и установке idUser следующим образом:

Car car = new Car();
car.setIdUser(idUser);
entityManager.persist(car);

Я ожидаюcar.getUser() чтобы лениво загрузить пользователя с предоставленным идентификатором, но это null. Как я могу инициализировать ленивое поведение на этом новом объекте?Я не хочу делать car.setUser(someUser), потому что это означало бы, что я должен сам получить пользователя.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Когда hibernate не может инициализировать прокси, выдается LazyInitializationException.Поскольку вместо этого вы получаете null, пользователь, скорее всего, вообще не сохраняется.

Установщик, который вы используете car.setIdUser(idUser);, выглядит как устанавливающий идентификатор, а не сущность, что, скорее всего, нечто вы хотите сделать.

Вы должны сделать что-то.например, car.setUser(userEntity) и полностью удалите сопоставление для внешнего ключа:

@Column(name = "id_user", nullable = false)
private Integer idUser;

Если вы не сохраняете сущность User до сохранения Car, вы должны взглянуть на CascadeType.PERSIST Примечание добавление CascadeType.ALL удалит User, если автомобиль будет удален.

https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade-types/

0 голосов
/ 11 июня 2018

вы можете создать нового пользователя и установить идентификатор пользователя и добавить его в машину

User user = new User();
user.setId(userId);//userId is the id of user in db
car.setUser(user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...