JPA @OrderBy с гибернацией - PullRequest
       10

JPA @OrderBy с гибернацией

2 голосов
/ 03 августа 2020

Я использую спящий режим и хочу использовать @OrderBy для заказа resultSet:

public class TopLevelEntity extends Entity {
    @OneToMany(mappedBy = "topLevelEntity", fetch = FetchType.LAZY, 
               cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<TopLevelEntityTranslation> translations;
    //other fields
}

public class NextLevelEntity extends Entity {
    @OneToMany(mappedBy = "nextLevelEntity", fetch = FetchType.LAZY, 
               cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<NextLevelEntityTranslation> translations;

    @Column
    private Long number;
    //other fields
}

public class TopLevelEntityTranslation extends Entity {
    @ManyToOne
    @JoinColumn(name = "TOP_LVL_ENTITY_ID")
    private TopLevelEntity topLevelEntity;
    
    @OrderBy("nextLevelEntity.number")
    @OneToMany(mappedBy = "topLevelEntityTranslation", fetch = FetchType.LAZY, 
               cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<NextLevelEntityTranslation> nextLevelEntityTranslations;
    //other fields
}

public class NextLevelEntityTranslation extends Entity {
    @ManyToOne
    @JoinColumn(name = "TOP_LVL_ENTITY_TR_ID")
    private TopLevelEntityTranslation topLevelEntityTranslation;

    @ManyToOne
    @JoinColumn(name = "NEXT_LVL_ENTITY_ID")
    private NextLevelEntity nextLevelEntity;
    //other fields
}

У меня есть иерархия сущностей, как показано выше. Но аннотация @OrderBy (не аннотация c, а оператор, сгенерированный спящим режимом) выдает исключение. Основная часть исключения:

отсутствует запись в предложении FROM для таблицы «nextLevelEntity»

Есть несколько примеров использования jpa @OrderBy, но шаблон из тех, что я нашел, то же самое и с моим. Прочтите, что @OrderBy не работает с реализацией JPA Hibernate. Но вопрос задавали 7 лет а go. Это правда или у меня есть ошибка в коде?

1 Ответ

2 голосов
/ 03 августа 2020

Фактически, согласно документации для @OrderBy:

Обозначение точки («.») Используется для обозначения атрибута во встроенном атрибуте. Значение каждого идентификатора, используемого с точечной нотацией, является именем соответствующего встроенного поля или свойства.

Пример:

@Entity 
public class Person {
   ...
   @ElementCollection
   @OrderBy("zipcode.zip, zipcode.plusFour")
   public Set<Address> getResidences() {...};
   ...
}
  
@Embeddable 
public class Address {
  protected String street;
  protected String city;
  protected String state;

  @Embedded
  protected Zipcode zipcode;
}

@Embeddable 
public class Zipcode {
   protected String zip;
   protected String plusFour;
}

Таким образом, вы не можете использовать его для своих чехол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...