Наследование Hibernate, Collections и атрибут суперкласса @OrderedBy генерируют синтаксическую ошибку MySQL - PullRequest
1 голос
/ 22 марта 2011

Я использую Hibernate 3.6.1 для сопоставления трех сущностей

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Entry {
   private Long id; 
   private Date publishedAt; 

   @Id
   public getId() {...}

   ...
}

@Entity
public class Category {
   private Long id; 

   List<Podcast> podcasts;

   @Id
   public getId() {...}

   @OneToMany(mappedBy = "category", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
   @OrderBy("publishedAt")
   public List<Podcast> getPodcasts() {
      return podcasts;
   }
}

и

@Entity
public class Podcast extends Entry {

   private Category category; 

   @ManyToOne(fetch = FetchType.EAGER)
   public PodcastsCategory getCategory() {
      return category;
   }
}

Если я пытаюсь получить экземпляр Category, я получаю исключение

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'podcasts0_.Entry.publishedAt' in 'order clause'

Что вызывает это исключение?Что не так с этим отображением?

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Это вызвано следующей ошибкой: HHH-3577 Неправильный SQL в предложении по порядку при использовании объединенных подклассов .

В качестве обходного пути вы можете удалить @OrderBy и fetch = FetchType.EAGER на podcasts и загрузить категорию, используя следующий запрос вместо get():

SELECT DISTINCT c 
FROM Category c LEFT JOIN FETCH c.podcasts p
WHERE c.id = ?
ORDER BY p.publishedAt
1 голос
/ 22 марта 2011

Вы можете попробовать аннотацию @MappedSuperClass. Смотрите раздел 2.2.4.4. Унаследуйте свойства от суперклассов документации гибернации.

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