【问题标题】:JPA ManyToMany List is EmptyJPA 多对多列表为空
【发布时间】:2018-12-07 09:01:36
【问题描述】:

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

然后得到

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

【问题讨论】:

  • 不需要 DDL,因为我为什么需要它,但肯定可以使用 fetch 代码,因为您的问题是为什么 fetch 不起作用。

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


【解决方案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;

【讨论】:

    【解决方案2】:

    正如预期的那样,这是一个简单的拼写错误,34 位以上的观众也错过了。我尝试将参数添加到注释中:

    @ManyToMany(mappedBy = "")
    

    并用双引号向 Intellij 提出建议。令人惊讶的是,它建议了来自另一个实体的字段 - RegionType。错误在列表类型中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2016-01-03
      相关资源
      最近更新 更多