有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

hibernate Java一对多持久化哈希集

有人能告诉我,当我从邮递员那里发出请求时,我的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",
        }
    ]
}

共 (1) 个答案

  1. # 1 楼答案

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

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

    通过这个注释,您可以对JsonEncoderDecoder说,当从json对象转换到hibernate实体时,忽略这个属性

    你也错过了两个实体之间关系的一面。使用这样的东西:

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

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

    而且大多数实体都有一个@Id列作为主键