【问题标题】:Java one to many persist hashsetJava 一对多持久化哈希集
【发布时间】:2017-09-08 20:27:22
【问题描述】:

有人可以指导我,当我从邮递员发送请求时,我的 reportFilter 为空。 “名称”字段已正确设置但报告过滤器为空。我在 OneToMany 上缺少任何注释?我正在调用 /api/save ,它采用 ReportTemplate 对象,但我没有在该对象中获取 reportFilter 列表

@Entity
@Audited
@XmlRootElement
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "name"))
@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer" })
public class ReportTemplate {
 private String name;
 private String templateFormat;
 private Set<ReportFilter> reportFilter = new HashSet<>();

 @NotNull
 public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

 @OneToMany(mappedBy="reportTemplate")
 @JsonIgnore
 public Set<ReportFilter> getReportFilter() {
    return reportFilter;
 }

  public void setReportFilter(Set<ReportFilter> reportFilter) {
    this.reportFilter = reportFilter;
  }
}

@Entity
@Audited
@XmlRootElement
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"column_1", "reportTemplate_id"}))
@JsonIgnoreProperties(value = { "handler", "hibernateLazyInitializer" })
public class ReportFilter {

private String column_1;
private ReportTemplate reportTemplate;

 @NotNull
 public String getColumn_1() {
    return column_1;
 }

 public void setColumn_1(String column_1) {
    this.column_1 = column_1;
 }

 @ManyToOne
 @NotNull
 public ReportTemplate getReportTemplate() {
    return reportTemplate;
 }

 public void setReportTemplate(ReportTemplate reportTemplate) {
    this.reportTemplate = reportTemplate;
 }
}

邮递员请求:

{
    "name": "Test-Report",
    "reportFilter": [
        {
            "filterColumn": "Reference Number",
            "column_1": "A",
            "columnValue": "HE222",
        },
        {
            "filterColumn": "Test Column",
            "column_1": "B",
            "columnValue": "1234",
        }
    ]
}

【问题讨论】:

标签: java hibernate jpa jakarta-ee


【解决方案1】:

您的问题可以通过从以下代码中删除 @JsonIgone 来解决:

@OneToMany(mappedBy="reportTemplate")
public Set<ReportFilter> getReportFilter() {
   return reportFilter;
}

您对 JsonEncoderDecoder 说的这个 anntotaion 在从 json 对象转换为休眠实体时忽略此属性。

您还错过了两个实体之间关系一侧的@JoinColumn。使用这样的东西:

@ManyToOne
@JoinColumn(name = "TEMPLATE_ID")
@NotNull
public ReportTemplate getReportTemplate() {
    return reportTemplate;
}

你需要这个来定义所有者实体。

而且所有实体 MOST 都有一个 @Id 列作为主键。

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 2017-06-21
    • 2017-04-06
    • 2021-10-16
    • 2011-06-19
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多