springboot jpa объединяет две таблицы - PullRequest
0 голосов
/ 06 октября 2019

Я хочу запросить данные из двух таблиц,

поле местоположения в переводе - это внешний ключ из поля идентификатора местоположения

@Entity
@Table(name = "Translation")
@Data
public class Translation {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @NotNull private String language;

  @NotNull private String name;

  @NotNull private String description;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "location", nullable = false, insertable = false, updatable = false)
  @Fetch(FetchMode.JOIN)
  private Location location;
}


@Entity
@Table(name = "Location")
@Data
public class Location {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;

  @NotNull private String code;

  @NotNull private String type;

  private Double longitude;
  private Double latitude;

  @Column(name = "parent_id")
  private Integer parentId;

  @OneToMany(targetEntity = Translation.class, mappedBy="id", fetch = FetchType.EAGER)
  private Set<Translation> translations;
}

—————————————————————————————————————————

Но когда я использую запрос

  @Query(
      "SELECT new com.afkl.travel.exercise.model.RetrieveLocationResponse("
          + "loc.code, tran.name, loc.type, loc.latitude, loc.longitude, tran.description, loc.parentId)"
          + "FROM Location loc LEFT JOIN loc.translation tran")
  List<RetrieveLocationResponse> fetchLeftJoin();

Все поля, относящиеся к переводу, являются пустыми, понятия не имеют, что произошло

enter image description here


ОБНОВЛЕНИЕ

У меня работают следующие.

  @OneToMany(mappedBy = "location", cascade = CascadeType.ALL)
  @JsonIgnore
  private Set<Translation> translations;

  @ManyToOne
  @JoinColumn(name = "location")
  private Location location;
...