2016-11-17 182 views
0

我嘗試使用Hiberante標準API對結果進行升序或降序排序。org.hibernate.criterion.Order未使用'。'解析屬性字符串

我有定義的類A; (以簡化格式)

@Entity 
public class A { 

    @ManyToOne 
    @JoinColumn(name = "yy") 
    B b; 

    ... 
} 

而我的B實體就像;

@Entity 
public class B extends C { 
    ... 
} 

@Entity 
public class C { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id", updatable = false, nullable = false) 
    private Long id; 

    @NotNull 
    @NotEmpty 
    @Size(max = 64) 
    @Pattern(regexp = REGEX_CODE, message = "Must be valid LOB Code") 
    @Column(name = "code", updatable = false, nullable = false) 
    private String code; 


    } 
} 

當我使用;

criteria.addOrder(Order.asc(b.id)); //works 

criteria.addOrder(Order.asc(b.code)); //Throws error 

Error 


Caused by: org.hibernate.QueryException: could not resolve property: manufacturer.code of: xx.core.model.wetstock.ATG 
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62) 
    at org.hibernate.persister.entity.AbstractPropertyMapping.toColumns(AbstractPropertyMapping.java:77) 
    at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:43) 
    at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1793) 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:510) 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:469) 
    at org.hibernate.criterion.Order.toSqlString(Order.java:109) 
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getOrderBy(CriteriaQueryTranslator.java:414) 
    at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:106) 
    at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:75) 
    at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:80) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1841) 
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:365) 
    at com.cdi.crud.infra.Crud.list(Crud.java:450) 
    at com.cdi.crud.infra.CrudService.paginate(CrudService.java:210) 

當我看到B表時,我看到列「ID」在那裏。沒有其他列出現。 其他列在表格「C」下創建。

所以如果我使用「。」要對錶C中列出的列進行排序,我得到的屬性無法解決問題。

我該如何克服這個問題?

回答

1

我通過添加「別名」來修復。

eg: criteria.createAlias("b" ,"bob").addOrder(Order.asc(bob.code))