проблема написания детей в отношениях JPO @OneToMany от JHipster - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь сделать обходной путь для этой проблемы, которую я ввел: https://github.com/jhipster/generator-jhipster/issues/9639

Я проделал некоторую работу (я добавил findAllWithEagerRelationships в хранилище), и метод GET работает нормально: я получаювсе мастера и дети.

То, что не работает, и мне нужна ваша помощь, это метод POST: когда я публикую parent с некоторыми детьми (домашними животными), дети не размещаются с родителемзначит дети потерялись.Подводя итог, можно получить правильный результат:

[
  {
    "id": 1002,
    "name": "Piera",
    "pets": [
      {
        "id": 1051,
        "name": "fido",
        "species": "barboncino",
        "owner": {
          "id": 1002,
          "name": "Piera"
        }
      }
    ]
  }
]

, но сообщение работает неправильно:

{
  "name": "newName",
  "pets": [
    {
      "id": 1051
    }
  ]
}

newName создано, но питомец 1051 не прикреплен к нему

Я работаю над приложением, сгенерированным с помощью Jhipster:

entity Owner {
    name String required
}

entity Pet {
    name String required,
    species String required
}

relationship OneToMany {
    Owner{pet} to Pet{owner}
}

для получения, я добавил эти два метода, которые я скопировал, для формирования отношения manytomany, и они сработали:

@Query(value = "select distinct owner from Owner owner left join fetch owner.pets")
List<Owner> findAllWithEagerRelationships();

@Query("select owner from Owner owner left join fetch owner.pets where owner.id =:id")
Optional<Owner> findOneWithEagerRelationships(@Param("id") Long id);
    Public class Owner implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @OneToMany(mappedBy = "owner")
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Pet> pets = new HashSet<>();
    // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove

    public class Pet implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @NotNull
    @Column(name = "species", nullable = false)
    private String species;

    @ManyToOne
    @JsonIgnoreProperties("pets")
    private Owner owner;

    // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove

Я ожидаю, что когда я пишу сообщение родителю с несколькими детьми, дети (домашние животные) также публикуются.

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

в отчете об ошибках я мог найти обходной путь, не касаясь JPA.Я до сих пор не знаю, как мы можем назначить нового владельца, связывающего его с домашними животными с JPA, так как я получил решающий ответ, в любом случае мой обходной путь работает.спасибо :)

0 голосов
/ 12 мая 2019

В вашем Owner интерфейсе службы и уровне реализации (он должен быть в com.yourpackage.service и com.yourpackage.service.impl) создайте новый метод, такой как

public Optional<Owner> findOneWithChildren(long id) {
   Optional<Owner> owner = ownerRepository.findById(id);
   owner.ifPresent(o -> {
       o.getPets().addAll(petRepository.getByParentId(id);
   }
   return owner.map(ownerMapper::toDto);
}

И в вашем Pet репозитории создайте новый метод, например

List<Pet> getByParentId(long id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...