Spring Jpa Entity - EntityManager.getReference - PullRequest
0 голосов
/ 16 марта 2019

У меня есть приложение Spring Boot, использующее Spring JPA, и я пытаюсь сохранить новую сущность, имеющую некоторые внешние ключи, просто предоставив идентификаторы этих дочерних сущностей.Так, например:

@Table(name = "PERSON")
public class Person {
@Column(name = "PET_GUID")
public Pet pet;
}

Используя это, я бы хотел, чтобы мой PersonRepository, который реализует CrudRepository, сохранял Person, просто предоставляя guid для Pet.Используя прямой переход в спящий режим, я могу сделать это с помощью EntityManager.getReference.Я знаю, что могу вставить EntityManager в мой Entity или Repository и сделать что-то таким образом, но есть ли более простой способ?Я попытался просто сделать person.setPet (new Pet (myPetsGuid)), но при этом я получил «внешний ключ не найден», так что, похоже, он не работает.

1 Ответ

1 голос
/ 17 марта 2019

Во-первых, вы должны добавить @ ManyToOne отношение к свойству pet:

@Entity
@Table(name = "PERSON")
public class Person {

    //...

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name = "pet_guid")
    privat Pet pet;
}

В Hibernate сказано использовать внешний ключ для объекта Pet (иего таблица).

Во-вторых, вы должны использовать метод getOne вашего PersonRepository, чтобы получить ссылку на сущность Pet, например:

@Service
public class PersonService {

    private final PetRepository petRepo;
    private final PersonRepository personRepo;

    //...

    @NonNull
    @Transactional
    public Person create(@NonNull final PersonDto personDto) {
         Person person = new Person();
         //...
         UUID petId = personDto.getPetId();
         Pet pet = petRepo.getOne(perId);
         person.setPet(pet);
         //...
         return person.save(person);
    }

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