我试图基于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”的城市
是否有更好的方法来管理此消息,或者是我的要求?
先谢谢您。