如何在Spring boot + rest中使用@ManyToOne关系修改对象

时间:2017-10-23 12:31:19

标签: spring rest spring-boot spring-data spring-data-jpa

这是我的地区课程:

    @Entity(name = "REGION")

public class Region {

    private Long id;
    private String region;

    @OneToMany(targetEntity = Compagnie.class, mappedBy = "region", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<Compagnie> compagnie;

这是我的Compagnie课程:

@Entity(name = "COMPAGNIE")
public class Compagnie {

    private Long id;
    private String compagnie;

    @ManyToOne
    @JoinColumn(name = "REGION_ID")
    private Region region;

这是我来自控制器类的编辑方法:

@RequestMapping(value = "/compagnie/{id}", method = RequestMethod.GET)
public ResponseEntity<?> getCompagnie(@PathVariable("id") long id) {
    logger.info("Fetching Compagnie with id {}", id);
    Compagnie compagnie = compagnieRepository.findOne(id);
    if (compagnie == null) {
        logger.error("Compagnie with id {} not found.", id);
        return new ResponseEntity(new CustomErrorType("Unable to update. Compagnie with id " + id + " not found."),
                HttpStatus.NOT_FOUND);
    }
    return new ResponseEntity<Compagnie>(compagnie, HttpStatus.OK);
}

我用于测试的json是:

{   &#34; compagnie&#34;:&#34; test compagnie 1&#34;,   &#34; region&#34;:{     &#34; id&#34;:1,     &#34;地区&#34;:&#34;地区1&#34;   } }

公司的改变,但区域不会,我无法从@requestBody读取区域属性。

我真的需要你的帮助。 谢谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,您的持久性提供程序不会在这种情况下获取Region

在实体上定义实体图表详细信息:

@Entity(name = "COMPAGNIE")
@NamedEntityGraph(name = "Compagnie.region",
  attributeNodes = @NamedAttributeNode("region"))
public class Compagnie {

然后覆盖jpa存储库界面中findOne方法的定义:

public interface CompagnieRepository extends JpaRepository<Compagnie, String> {

    @EntityGraph("Compagnie.region")
    Compagnie findOne(Long id);
}

现在急切地获取依赖关系,并且区域数据应该存在于响应主体中。