/**
* Cree une expression Criteria API avec l'atribut de l'entité passé en parametre
*
* @param root
* entité JPA contenant le champ
* @param columnData
* nom du champ
* @param clazz
* class du champ
* @param <S>
* type du champ
* @return l'expression de l'atribut
*/
public static <S> Path<S> getExpression(final Root<?> root, final String columnData, final Class<S> clazz) {
if (!columnData.contains(DatatableSpecification.ATTRIBUTE_SEPARATOR)) {
// columnData is like "attribute" so nothing particular to do
return root.get(columnData);
}
// columnData is like "joinedEntity.attribute" so add a join clause
final String[] values = columnData.split(DatatableSpecification.ESCAPED_ATTRIBUTE_SEPARATOR);
final Attribute<?, ?> attribute = root.getModel().getAttribute(values[0]);
if (attribute == null) {
throw new IllegalArgumentException(
"Colonne '" + values[0] + "' (" + columnData + ") introuvable depuis l'entité '" + root.getJavaType()
+ "'");
}
if (attribute.getPersistentAttributeType() == PersistentAttributeType.EMBEDDED) {
// with @Embedded attribute
return root.get(values[0]).get(values[1]);
}
From<?, ?> from = root;
for (int i = 0; i < values.length - 1; i++) {
Join<?, ?> join = null;
for (final Join<?, ?> joinCandidate : from.getJoins()) {
if (joinCandidate.getAttribute().getName().equals(values[i])) {
// LOGGER.debug("Trouve joint d'entite: '{}'", values[i]);
join = joinCandidate;
}
}
if (join == null) {
// LOGGER.debug("Joigant entite '{}'...", values[i]);
join = from.join(values[i], JoinType.INNER);
}
from = join;
}
return from.get(values[values.length - 1]);
}
DatatableHelper.java 文件源码
java
阅读 25
收藏 0
点赞 0
评论 0
项目:datatable-java
作者:
评论列表
文章目录