2013-12-12 40 views
0

我的模型:休眠4的EntityManager CriteriaBuilder sortby嵌套属性

public class Nested { 
    private Integer id; 
    private String sortBy; 
    [...] 
} 

public class ObjectToQuery { 
    private Integer id; 
    private Nested nested; 
    private OtherProperty otherProperty; 
    [...] 
} 

我的元模型:

@StaticMetamodel(Nested.class) 
public class Nested_ { 
    public static volatile SingularAttribute<Nested, Integer> id; 
    public static volatile SingularAttribute<Nested, String> sortBy; 
[...] 
} 
@StaticMetamodel(ObjectToQuery.class) 
public class ObjectToQuery_ { 
    public static volatile SingularAttribute<ObjectToQuery, Integer> id; 
    public static volatile SingularAttribute<ObjectToQuery, Nested> nested; 
    public static volatile SingularAttribute<ObjectToQuery, OtherProperty> otherProperty; 
    [...] 
} 

我用org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean注入的EntityManager到我的DAO

public class ObjectToQueryDao { 
    @PersistenceContext 
    private EntityManager entityManager; 

    public List<ObjectToQuery> listObjectToQueryByOtherProperty(OtherProperty otherProperty) { 
     CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 
     CriteriaQuery<ObjectToQuery> criteriaQuery = criteriaBuilder 
      .createQuery(ObjectToQuery.class); 
     Root<ObjectToQuery> rootObjectToQuery = criteriaQuery.from(ObjectToQuery.class); 
     criteriaQuery.where(criteriaBuilder.equal(
      rootObjectToQuery.get("otherProperty"), otherProperty)); 
     return entityManager.createQuery(criteriaQuery).getResultList(); 
    } 
} 

我可以用

criteriaQuery.orderBy(criteriaBuilder.asc(rootObjectToQuery 
    .get(ObjectToQuery_.nested))); 

(这种种由nested.id)

但我想通过

ObjectToQuery.Nested.sortBy 

排序我使用Hibernate 4.2.6.FINAL作为我JPA实现

回答

1

我发现答案我自己:

Join<ObjectToQuery, Nested> join = rootObjectToQuery 
    .join(ObjectToQuery_.nested); 
criteriaQuery.orderBy(criteriaBuilder.asc(join 
    .get(Nested_.sortBy))); 

我希望这可以帮助s omebody