在ServiceImpl中使用StaticMetamodel(JPA)是不好的做法吗?

时间:2017-10-17 09:17:24

标签: java spring hibernate jpa

我正在重写现有应用程序的很大一部分。我们有GroupSuperGroup

Actualy,groupe只能存储一个stringValue。 为了尊重项目的新范围,我们希望Group存储多个值,如日期,数字和布尔值。 Group的类型取决于SuperGroup内存储的值。 (它还存储组值的格式,但这并不重要)

该应用程序的目的之一是按组值搜索。这是我的问题。

在服务中,我需要实现将调用DAO的搜索,并确定我必须进行搜索。

我的问题在标题中。在ServiceImpl中使用StaticMetamodel(JPA)是不好的做法吗?

为了说明我的问题,这是服务方法。

public Groupe getGroupeBySuperGroupeAndEntrepriseAndValue(SuperGroupe superGroupe, Entreprise entreprise, String value) {
    if (entreprise == null || StringUtils.isBlank(value)) {
        return null;
    }

    GroupeDataTypeEnum groupeDataTypeEnum = GroupeDataTypeEnum.getGroupeDataTypeByTypeValue(superGroupe.getDataType());

    Object finalValue;
    SingularAttribute singularAttribute;
    switch (groupeDataTypeEnum) {
        case STRING_DATA_TYPE:
            finalValue = value;
            singularAttribute = Groupe_.stringValue;
            break;
        case NUMBER_DATA_TYPE:
            finalValue = FormatUtils.formatStringToDouble(superGroupe.getDataFormat(), value);
            singularAttribute = Groupe_.numberValue;
            break;
        case DATE_DATA_TYPE:
            finalValue = FormatUtils.formatStringToDate(superGroupe.getDataFormat(), value);
            singularAttribute = Groupe_.dateValue;
            break;
        case BOOLEAN_DATA_TYPE:
            finalValue = FormatUtils.formatStringToBoolean(superGroupe.getDataFormat(), value);
            singularAttribute = Groupe_.booleanValue;
            break;
        default :
            finalValue = null;
            break;
    }

    return groupeDAO.getGroupeBySuperGroupeAndEntrepriseAndValue(superGroupe, entreprise, finalValue, singularAttribute);
}

在DAO中,搜索参数中传递的单数属性。

我的问题纯粹是概念性的。是否可以使用由服务中的org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor生成的SingularAttribute。如果我们离开Hibernate,我可能会失去那个StaticMetamodel,所以我们会有bug。但我们可以重新生成它们,因为StaticMetamodel是Java stanndard。

有没有更好的方法来做我想要的事情?

我需要一些帮助来清除我的想法。提前谢谢,欢迎任何回复。

0 个答案:

没有答案