JPA ManyToMany列表为空

时间:2018-12-07 09:01:37

标签: java hibernate jpa java-ee many-to-many

问题:绑定到Postgres表后,我的实体列表为空。

研究:JavaEE7,Java8,JPA2.1。该实体的OneToMany以及其他实体中类似的ManyToMany绑定字段在同一数据库上也可以正常工作。

表DDL:

create table clean.report_type_to_indicator_type(
indicator_type_id integer not null
    constraint report_type_to_indicator_type_indicator_type_id_fk
        references indicator_type,
report_type_id integer not null
    constraint report_type_to_indicator_type_report_type_id_fk
        references report_type,
constraint report_type_to_indicator_type_pk
    primary key (indicator_type_id, report_type_id)
);

create unique index 
report_type_to_indicator_type_indicator_type_id_report_type_id_
on clean.report_type_to_indicator_type (indicator_type_id, 
report_type_id);

实体

@Entity
@Table(schema = "clean")
@JsonIgnoreProperties(ignoreUnknown = true)
public class IndicatorType {

  // Fields:

  @Id @GeneratedValue private int id;
  private String name;

  @ManyToOne private Unit unit;

  @ManyToOne private PeriodType periodType;

  @ManyToOne private RegionType regionType;

  @ManyToMany
  @JoinTable(
      schema = "clean",
      name = "report_type_to_indicator_type",
      joinColumns = @JoinColumn(name = "indicator_type_id"),
      inverseJoinColumns = @JoinColumn(name = "report_type_id"))
  private List<RegionType> reportTypes;

  // Getters and setters:
}

我在REST服务中创建实体,例如:

IndicatorType indicatorType = comparisonDao.getIndicatorTypeById(1);

并获得enter image description here

问题:关于使它起作用的任何想法。代码还需要什么?

2 个答案:

答案 0 :(得分:1)

级联丢失。下面是示例:

@ManyToMany(
        cascade = {CascadeType.ALL},
        fetch = FetchType.LAZY
    )
    @JoinTable(
        name = "report_type_to_indicator_type",
        joinColumns = {@JoinColumn(name = "indicator_type_id")},
        inverseJoinColumns = {@JoinColumn(name = "report_type_id")}
    )
    private List<RegionType> reportTypes;

答案 1 :(得分:0)

与预期的一样,这是一个简单的错字错误,有34+位观众也错过了。我尝试将参数添加到批注:

@ManyToMany(mappedBy = "")

,并要求Intellij用双引号引起建议。令人惊讶的是,它建议了另一个实体RegionType的字段。错误在于列表类型:

private List<RegionType> reportTypes;
-> private List<ReportType> reportTypes;