Как сохранить объект с внешним ключом, не загружая связанный объект в JPA?

У меня есть две сущности:

Account {
  @Id
  Long id;
}

Preference {
  ...
  @ManyToOne
  private Account account;
}

При сохранении настроек у меня есть accountId, но у меня нет учетной записи. Как мне сохранить предпочтения в этой ситуации?

Загрузить сущность Account и установить ее по предпочтению? Мне это кажется ошибочным путешествием в базу данных.

Есть ли поле accountId, которое является постоянным и делает поле Account доступным только для чтения? Наличие как поля accountId, так и поля Account кажется излишним?

Использовать NamedQuery для сохранения предпочтения? Я надеялся просто сохранить сущность без особой логики для.

 Bhesh Gurung10 окт. 2012 г., 23:50
Не NamedQuery, собственный SQL.

Ответы на вопрос(2)

Решение Вопроса

em.getReference(Account.class, accountId), Возвращает неинициализированный прокси на объекте, не заходя в базу данных. Ваш вариант использования является основной причиной существования этого метода.

em.getReference или жеJpaRepository.getOne Для манипулирования Spring-data-jpa существуют другие решения:

Это возможно через Update Query. Например. с пружинными данными

@Transactional
@Modifying
@Query("UPDATE Preference SET prop1=:prop1 .. WHERE u.id=:id")
int updatePreference(@Param("id") int id, @Param("prop1") String prop1, ...);

видетьОбновление сущностей с помощью запроса на обновление в Spring Data JPA

Есть весна-данныеDomainClassConverter это автоматическое разрешение экземпляров сущностей из параметров запроса или переменных пути. Например.

@GetMapping("/employees/{id}")
public Employee getEmployeeById(@PathVariable("id") Employee employee) {
    return employee;
} 

ВидетьРазрешение экземпляров сущностей из параметров запроса или переменных пути

Ваш ответ на вопрос