首页 > 解决方案 > Spring JPA HashSet 只返回一个值

问题描述

我正在使用带有 Spring 的 Web 应用程序和 MySQL 的示例数据库世界,我有表国家和表 languageCountries 一对多相关,在 Java 中创建实体时,一切正常,但是当尝试检索一组对于语言,只有一种语言会返回,即使我有更多,我也有一些事情让我失望,我不知道它是什么。

派斯班

@Data
    @Entity
    @Table(name = "country")
    public class Pais implements Serializable{
      private static final long serialVersionUID = 1L;

      @Id
      @Column(name="Code")
      private String codigo;
          
      @Column(name="Name")
      private String nombre;
  
      @OneToOne
      @JoinColumn(name = "Capital")
      private Ciudad capital;
    
      @OneToMany(fetch=FetchType.EAGER)
      @JoinColumn(name = "Code")    
      private Set<Idioma> idiomas = new HashSet<>();

}

成语班

@Data
@Entity
@Table(name = "countrylanguage")
public class Idioma implements Serializable{
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @Column(name="Code")

    private String codigo;
    
    @Column(name="Language")
    private String nombre;
    
    @Column(name="Is_official")
    private String oficial;
    
    @Column(name="Percentage")
    private Float porcentaje;
}

在此处输入图像描述

标签: javaspringjpa

解决方案


您有 @OneToMany 关系,但您还需要在 Idioma 类中添加 @ManyToOne 关系。您还可以在此处使用外键定义列。

像这样的东西:

@Entity
public class Country {

    @Id
    @Column(nullable = false, updatable = false, length = 3)
    private String code;

    @Column(length = 52)
    private String name;

    ...

    @OneToMany(mappedBy = "country", targetEntity = Countrylanguage.class,
            fetch = FetchType.LAZY)
    private Set<Countrylanguage> countrylanguageCountrys;
}
@Entity
public class Countrylanguage {

    @Id
    @Column(nullable = false, updatable = false, length = 3)
    private String code;

    ...

    @Column(nullable = false, unique = true, length = 30)
    private String language;

    @ManyToOne
    @JoinColumn(name = "country_id", nullable = false)
    private Country country;
}

我认为使用https://bootify.io你可以创建 JPA 类,你可以在那里导入你的 SQL 方案。


推荐阅读