org.hibernate.criterion.Order 未解析带有“.”的属性对于字符串

org.hibernate.criterion.Order is not resolving properties with '.' for strings

我尝试使用 Hiberante 标准对结果进行升序或降序排序 API。

我有class一个定义; (简化格式)

@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 的 Table 时,我看到列 "id" 在那里。没有显示其他列。 其他列在 table "C".

下创建

所以如果我使用“.”使用 table C 中显示的列进行排序,我得到 属性 无法解决问题。

我该如何克服这个问题?

我通过添加 "alias".

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