Итак, у меня есть созданное приложение JHipster
с несколькими сущностями и коллекциями, среди основных объектов, в которых у меня есть Study, у которого есть несколько коллекций.JPA коллекция с сохранением id, но не с другими полями
Одним из них является StudySites, это ManyToMany
где владелец Исследование:
Соотношение и сеттер в исследовании:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "study_sites_study",
joinColumns = @JoinColumn(name="studys_id", referencedColumnName="ID"),
inverseJoinColumns = @JoinColumn(name="study_sitess_id", referencedColumnName="ID"))
private Set<StudySites> studySites = new HashSet<>();
public void setStudySites(Set<StudySites> studySites) {
studySites.stream().forEach(ss-> {
Set<Study> setStudys=ss.getStudys();
setStudys.add(this);
ss.setStudys(setStudys);
});
this.studySites = studySites;
}
Отношение в StudySites:
@ManyToMany(mappedBy = "studySites")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Study> studys = new HashSet<>();
Отношения и то, как мы справляемся со всем этим, могут быть довольно сложными для объяснения, и это приведет к довольно большому сообщению, поэтому я попытаюсь продемонстрировать это, сказав, что мы собираем ll информацию в DTO
с Angular
и отправить ее на бэкэнд, где он распаковывает Studys и помещает все коллекции в StudyDTO, все это работает отлично, у меня есть все данные во всех полях вплоть до вызова метода сохранения из репозитория, где он сохраняет все остальные коллекции только штрафом, за исключением полей этого конкретного объекта.
Если я добавлю StudySite к исследованию, Hibernate
присвоит ему идентификатор, сохранит его, а также сохранит отношение в таблице соединений, поэтому, когда я снова загружу исследование, он покажет StudySite, но с пустыми полями.
Это происходит, когда я вставить новую или если я пытаюсь обновить существующий
Я также вошел переменное связывание с Hibernate, где вы можете оценить все значения происходят как нуль, но при сохранении в присоединиться к таблице он извлечет назначенный идентификатор и study_id:
Hibernate: /* insert org.wwarn.nmfisurveyor.datamanagement.domain.StudySites */ insert into study_sites (country_id, dms_lat, dms_lon, google_lat, google_lon, province_name, site_name) values (?, ?, ?, ?, ?, ?, ?)
2017-02-14 17:12:50.972 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [null]
2017-02-14 17:12:50.972 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [null]
2017-02-14 17:12:50.972 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARCHAR] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [DOUBLE] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [DOUBLE] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [6] as [VARCHAR] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [7] as [VARCHAR] - [null]
Hibernate: /* insert collection row org.wwarn.nmfisurveyor.datamanagement.domain.Study.studySites */ insert into study_sites_study (studys_id, study_sitess_id) values (?, ?)
2017-02-14 17:12:50.980 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [4089]
2017-02-14 17:12:50.980 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [1629]
Любые предложения приветствуются
PS: Среди различных вещей, которые я сделал, чтобы отследить ошибку, я полностью стерта сущность и все ссылки к нему (li quibase, все) И воссозданный с другим именем, ничего не изменилось.
Пробовал это как раз в случае раньше, но это создает ошибку при сохранении как вы не добавляете исследования в сборник исследований, устанавливая их в StudyDTO. Тем не менее, все другие коллекции ManyToMany имеют одинаковый набор. – Steven