сохранение нового объекта без необходимости извлекать ассоциации - PullRequest
2 голосов
/ 07 августа 2010

У меня есть следующее сопоставление в объявлении:

class Ad ... {
@Id
    @Column(name = "id", unique = true, nullable = false)   
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_ad_generator")      
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_id", nullable = false)
    private Category category;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "city_id", nullable = false)
    private City city;

В какой-то момент я хочу сохранить новое объявление ... но я знаю только значения идентификатора PK для категории и города (поскольку объекты преобразуются в DTO, отправьте их в интерфейс, где хранятся идентификаторы, затем DTO отправляется на сервер с категорией, идентификатором города и другими данными для создания объявления)

Чтобы сохранить новое объявление, которое я делаю: (em = EntityManager)

City city = em.find(City.class, city_id);
Category category = em.find(Category.class, category_id);

Ad ad = new Ad();
ad.setCity(city);
ad.setCategory(category);
ad.set(...otherstuff);
em.persist(ad);

это нормально и все, но hibernate выполняет выбор для города и выбор для категории, а затем выполняет вставку. Если бы я делал это в SQL и знал бы идентификаторы, я бы просто сделал оператор вставки (без выбора до этого)

Итак, это неправильно, как я это делаю? Или это просто природа ORM

1 Ответ

6 голосов
/ 07 августа 2010

Используйте метод getReference вместо find

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...