ManyToOne OneToMany双向:从引用表中检索数据

时间:2019-02-22 13:48:12

标签: java spring hibernate spring-boot spring-data-jpa

我想在发布对象的同时,从关系的引用表中返回数据。

关系定义如下:

@Entity
@Table( name = "application")
public class Application {

    @Id
    @JsonIgnore
    private Long id;

    @ManyToOne
    @JoinColumn(name = "product_category")
    private ProductCategory productCategory;

    ...

}

并且:

@Entity
@Table(name = "product_category")
public class ProductCategory {

    @Id
    @Column(name = "product_category_id")
    private Long productCategoryId;

    @Column(name = "description")
    private String description;

    @JsonIgnore
    @OneToMany(mappedBy = "productCategory")
    private Set<Application> applications;

    ...
}

我的product_category表具有以下数据:

enter image description here

发布具有以下结构的Json对象时:

...
{
  "productCategory": "0"
}
...

我想获得以下json输出:

...
"productCategory": {
    "productCategoryId": 0,
    "description": "Personal Loan"
},
...

但是我却得到了:

...
"productCategory": {
    "productCategoryId": 0,
    "description": null
},
...

可以请教吗?

1 个答案:

答案 0 :(得分:1)

您的问题中没有太多代码,但是您在评论中提到了返回的结果:

if(isset($_POST['submit'])){
  $turn =$_POST['turn'];

  foreach($turn as $turn){
    $value = "'".$turn."'";
    $var_aux[] = $value;
}
$values = implode(‘ , ’$var_aux);
$sql_values = "(" .$values. ")";

  $query = "INSERT INTO correspondencia (`turn`)
    VALUES('".$sql_values.";')”;
      $mysqli->query($query);
    }
  ?>

另一方面,您没有在映射中级联从父级到子级的更改:

return applicationRepository.save(appRequest);

我认为将@ManyToOne @JoinColumn(name = "product_category") private ProductCategory productCategory; 更改为@ManyToOne应该会有所帮助。

编辑:

如果您无法更改模型,只需返回您的实体:

@ManyToOne(cascade=CascadeType.ALL)

这种方式,jpa不会在保存时覆盖实体,它只是从db中读取一个。