JPA通过xml字段内容订购

时间:2014-07-09 12:29:10

标签: xml jpa sql-order-by

我有一个带有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;
}
....

由于

2 个答案:

答案 0 :(得分:0)

不,无法使用命名查询解析XML。

为什么不将数据存储为常规列(区域设置,名称等)并在需要时动态生成XML?

答案 1 :(得分:0)

感谢您的回答!!

根本不需要xml。仅使用一列来存储数据是一个想法。

如果我将数据存储为常规列,我将需要为我的应用程序中可用的每个语言环境添加一列,并且添加新的语言环境将会修改此类型的所有表。我认为这不是一个好主意。 可以评估的另一种方法是使用具有区域设置翻译的相关表(1-n)。 在这种情况下,我想我可以有一个带有连接的命名查询,一个用于过滤语言环境的参数和一个按列名称作为常规列的顺序