程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了外键在一对多关系中始终为空-使用JPA的Spring Boot Data大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决外键在一对多关系中始终为空-使用JPA的Spring Boot Data?

开发过程中遇到外键在一对多关系中始终为空-使用JPA的Spring Boot Data的问题如何解决?下面主要结合日常开发的经验,给出你关于外键在一对多关系中始终为空-使用JPA的Spring Boot Data的解决方法建议,希望对你解决外键在一对多关系中始终为空-使用JPA的Spring Boot Data有所启发或帮助;

您可以通过以下方式进行操作:

Country newCountry = new Country(country.getname());

ArrayList < Language > langList = new ArrayList<>();

for (Language lang : country.getLanguages()) {
     langList.add( new Language(language.getname(), newCountry ) ) ;
}

newCountry.setLanguages( langList );

iCountryRepository.save(newCountry);

PS:不要忘记添加适当的构造函数。另外,如果要像这样进行构造函数重载,则必须添加默认构造函数:

public Country() {}

public Country(String Name) {this.name = name }

解决方法

我有两个实体类,Country并且Language具有双向一对多关系。

以下是实体类:

@Entity
@Table(name = "COUNTRY")
public class Country {

    @Id
    @GeneratedValue
    @column(name = "COUNTRY_ID")
    private Long id;

    @column(name = "COUNTRY_NAME")
    private String name;

    @column(name = "COUNTRY_CODE")
    private String code;

    @JacksonXmlElementWrapper(localName = "languages")
    @JacksonXmlProperty(localName = "languages")
    @OneToMany(mappedBy = "country",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
    List<Language> languages;
    // getters and setters
}

和&Hellip;

@Entity
@Table(name = "LANGUAGE")
public class Language {
    @Id
    @GeneratedValue
    @column(name = "LANGUAGE_ID")
    private Long id;

    @column(name = "LANGUAGE_NAME")
    private String name;

    @manyToOne
    @Joincolumn(name = "COUNTRY_ID")
    @JsonIgnore
    private Country country;
    //getters and setters
}

以下是我的Rest控制器:

@RestController
@requestMapping("/countries")
public class CountryRestController {

    private final ICountryRepository iCountryRepository;

    @Autowired
    public CountryRestController(ICountryRepository iCountryRepository) {
        this.iCountryRepository = iCountryRepository;
    }

    @PostMapping("/country")
    public ResponseEntity<?> postCountryDetails(@requestBody Country country) {
        Country savedCountry = this.iCountryRepository.save(country);

        URI LOCATIOn = ServletUriComponentsBuilder.fromCurrentrequest().path("/{iD}")
                .buildAndExpand(savedCountry.getId()).toUri();
        return ResponseEntity.created(LOCATIOn).build();
    }

 //other methods

}

我正在尝试保存在JSON下面:

{
  "name": "Ireland","code": "IRE","languages": [
    {
      "name": "Irish"
    }
  ]
}

问题在于语言(子级)外键始终为null,但是正在插入其他属性。我用过class @JsonIgnore属性Country country,是Language因为它引起了请求大小的问题,因为我还有另一个API可以获取Country及其语言的数据。

请指导。

大佬总结

以上是大佬教程为你收集整理的外键在一对多关系中始终为空-使用JPA的Spring Boot Data全部内容,希望文章能够帮你解决外键在一对多关系中始终为空-使用JPA的Spring Boot Data所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。