JPA和JPQL:仅在父母中获得特定子女

时间:2018-06-25 19:07:21

标签: jpa internationalization jpql

我试图基于JPA创建一个I18N数据库。 我做了这样的事情: 具有一组名为“ ExtendedCommonTranslation”的翻译类的实体类。最后一个类包含基本信息,例如描述等,还包含定义语言的枚举。

以下是一些代码:映射到db中的城市类:

    @Entity
public @Data class City extends Place{
    private String postcode;
    private int recommandedDays;

    @ManyToOne
    private Country country;

    public City(String postcode, int recommandedDays){
        this.postcode = postcode;
        this.recommandedDays = recommandedDays;
    }
}

地点,由城市类别继承

 @MappedSuperclass
public @Data class Place {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    @OneToMany(cascade= {CascadeType.PERSIST,CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
    private Set<ExtendedCommonTranslation> commonFields = new HashSet<ExtendedCommonTranslation>();

}

还有ExtendedCommonTranslation,它是定义语言的类

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public @Data class ExtendedCommonTranslation extends CommonTranslation {
    public String smallDesc;

    public ExtendedCommonTranslation(I18nLang lang){
        super(lang);
    }
    ExtendedCommonTranslation(){
         super();        
     }

}

我正在尝试执行jpql查询,如下所示:

@Query("Select c from City c join fetch c.commonFields cf where cf.lang = :lang")
List<City> findAllInLang(@Param("lang") I18nLang lang);

I18nLang是枚举。

因此,基本上,此请求返回所有城市的所有城市(好:)),还返回所有语言的所有“ ExtendedCommonTranslation”(坏:()。 我有一个附属于某些国家的城市。我希望这些城市根据不同的语言使用不同的“ ExtendedCommonTranslation”。所以基本上我想,例如在请求中将I18nLang设置为英语。要获取所有仅具有与此语言相关的“ ExtendedCommonTranslation”的城市

是否有更好的方法来管理此消息,或者是我的要求?

先谢谢您。

0 个答案:

没有答案