我有一个带有idCountry和name列的表(Country)。 名称列包含具有此类
的区域设置翻译的xml数据<?xml version='1.0' encoding='UTF-8'?> <root available-locales="es_ES,ca_ES" default-locale="es_ES"> <Name language-id="ca_ES">Espanya</Name> <Name language-id="es_ES">España</Name></root>
我需要按名称订购数据,但不是针对完整的xml内容,而是针对具体的区域设置数据。
使用NameQuery可以做到这一点吗?
这是我的实体:
@Entity
@Table(name = CountryEntity.TABLE_NAME)
@Inheritance(strategy = InheritanceType.JOINED)
@NamedQueries({
@NamedQuery(name = CountryEntity.GET_ALLDATA_QUERY_NAME, query = CountryEntity.GET_ALLDATA_QUERY, hints = {@QueryHint(name = "org.hibernate.cacheable", value = "true")})})
public class CountryEntity {
/* TABLE */
protected static final String TABLE_NAME = "EP_COUNTRY";
/* COLUMNS */
public static final String ID_COUNTRY_COLUMN = "ID_COUNTRY";
public static final String NAME_COLUMN = "NAME";
public static final String GET_ALLDATA_QUERY = "SELECT c FROM CountryEntity c ";
private Long idCountry;
private String name;
@Column(name = ID_COUNTRY_COLUMN, nullable = false, updatable = false)
@Id
public Long getIdCountry() {
return idCountry;
}
@Transient
public String getName(String locale) {
return Localization.getLocalization(this.getNames(), locale);
}
@Lob
@Column(name = NAME_COLUMN, columnDefinition = "TEXT")
public String getNames() {
return name;
}
....
由于
答案 0 :(得分:0)
不,无法使用命名查询解析XML。
为什么不将数据存储为常规列(区域设置,名称等)并在需要时动态生成XML?
答案 1 :(得分:0)
感谢您的回答!!
根本不需要xml。仅使用一列来存储数据是一个想法。
如果我将数据存储为常规列,我将需要为我的应用程序中可用的每个语言环境添加一列,并且添加新的语言环境将会修改此类型的所有表。我认为这不是一个好主意。 可以评估的另一种方法是使用具有区域设置翻译的相关表(1-n)。 在这种情况下,我想我可以有一个带有连接的命名查询,一个用于过滤语言环境的参数和一个按列名称作为常规列的顺序