首页 > 解决方案 > JPA 多对多列表为空

问题描述

问题:绑定到 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);

并得到在此处输入图像描述

问题:关于使其发挥作用所遗漏的任何想法。代码还需要什么?

标签: javahibernatejpajakarta-eemany-to-many

解决方案


缺少级联。下面是示例:

@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;

推荐阅读