2016-11-17 9 views
0

Я пробую сортировать результаты по возрастанию или по убыванию с использованием критериев критериев Hiberante.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)) 

 Смежные вопросы

  • Нет связанных вопросов^_^