java - Hibernate继承、Collections和@OrderedBy父类(super class)属性产生MySQL语法错误

标签 java mysql hibernate inheritance

我使用 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 上的 @OrderByfetch = 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/

相关文章:

java - 检查对象是否为矩阵

php - 如何使用两个时间戳之间的时间表计算时间差?

mysql - 按每行的总和对结果进行排序

java - hibernate查询的sql等价物是什么

java - 如何在 hibernate 条件上添加 "on"子句?

java - 组织.postgresql.util.PSQLException : No value specified for parameter 1

java - 带递归排序的 StackOverFlowError

java - 如何根据Java中的命令行参数使 "if"条件自动改变?

java - 如何将毫秒转换为相应的日期?

python - 按下登录按钮后,如何获取Tkinter条目的值并将其传递给SQL查询?