Сохранить объект с помощью внешнего ключа

У меня есть вопрос, который я надеюсь четко описать. У меня есть следующие занятия:

@Entity
public class Filter {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY,orphanRemoval = true)
    @JoinColumn(name = "filter_id", nullable = false)
    private Set<FilterMedication> medications;
//setter and getters are not show
...}

.

@Entity
public class FilterMedication {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @ManyToOne
    @JoinColumn(name = "medication_id", nullable = false)
    private Medication medication;
    // Setters and getters are not shown
    .....}

.

@Entity
@Table(name = "medication")
public class Medication {


    @Column(name = "generic_name")
    private String genericname;
    private String name;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id; 
// Setters and getters are not shown
        .....}

В основном фильтрует отношения «один ко многим» с FilterMedicaton, а FilterMedication имеет отношения «многие к одному» с лекарством.

Я создал репозиторий для запросов фильтров

public interface FilterRepository extends JpaRepository <Filter, Long> {}

Я могу добавить новый фильтр, отправив следующий объект JSON в функцию save ()

{
  "id": 1,
  "name": "Test1",
  "medications": [
    {
      "id": 2,
      "medication": {
        "genericname": "Oxymetazoline HCl Nasal Soln 0.05%",
        "name": "12 HOUR NASAL SPRAY 0.05 % NA SOLN",
        "strength": "0.05%",
        "form": "Solution",
        "route": "Nasal"
      }
    }
  ]
}

Теперь время для вопроса: есть ли способ передать внешний ключ лекарства вместо полного объекта лекарства, Spring JPA преобразует внешний ключ в соответствующий объект? Код JSON будет примерно таким

{
      "id": 1,
      "name": "Test1",
      "medications": [
        {
          "id": 2,
          "FORIGEN KEY": 1
        }
      ]
    }

Технически я могу написать для этого функцию; однако я считаю, что есть лучший и более чистый способ сделать это.

1
0
1 727
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
//convert json to java obj
Filter filter = new Gson().fromjson(yourjson, Filter.class);

//get the fiterMedication (id = 2)
int id = filter.getMedications().getId();
FilterMedication filterMedication = filterMedicationRepository.get(id);

Filter newFilter = new Filter();
newFilter.setId(filter.getId());
....//set name
newFilter.getMedications.add(filterMedication);//get the set of medications and add the element filterMedication

//save newFilter

Другие вопросы по теме