我使用 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'
是什么导致了这个异常?这个映射有什么问题?
最佳答案
这是由以下错误引起的:HHH-3577 Wrong SQL in order by clause when using joined subclasses .
作为解决方法,您可以删除 podcasts
上的 @OrderBy
和 fetch = FetchType.EAGER
并使用以下查询而不是 获取()
:
SELECT DISTINCT c
FROM Category c LEFT JOIN FETCH c.podcasts p
WHERE c.id = ?
ORDER BY p.publishedAt
关于java - Hibernate继承、Collections和@OrderedBy父类(super class)属性产生MySQL语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393526/