Вставка спящего объекта с отношениями - PullRequest
0 голосов
/ 28 февраля 2012

Скажите, у меня есть эти классы:

public class Loan {
    @Id
    private Long id;

    @ManyToOne
    @JoinColumn(name = "lender_id")
    private User lender;
}

public class User {

    @Id
    private Long id;

    @Column
    private String userName;

    @OneToMany
    private List<Loan> loans;
}

Теперь, допустим, у меня есть идентификатор пользователя (кредитора), и в слое DAO я хочу создать Loan на основе id кредитора?

Я понимаю, что могу сделать следующее:

User u = userDao.getUserById(1234L);
loanDao.createLoan(u, "someLoan");

Но мне интересно, возможно ли это сделать без предварительной загрузки записи User?

1 Ответ

2 голосов
/ 28 февраля 2012

Нет хорошего способа сделать это, отчасти потому, что это может привести к неправильному коду ORM.Вы, программист, несете ответственность за управление состоянием сущностей в памяти и поддержание их правильности.Если вы создаете новый заем и говорите, что он принадлежит пользователю, а у пользователя есть коллекция ссуд, вы обязаны добавить этот заем пользователю!(Это имеет реальные последствия, как только кеши включаются.)

Вы используете ORM, вам нужно думать с точки зрения объектов, а не с точки зрения базы данных.Добавление числа в столбец внешнего ключа - это не то, что важно, настройка правильного представления в памяти объекта Model - это то, что важно для вас.База данных - это проблема гибернации.

...