我有一个关于使用 @OrderBy 注释的休眠多对多映射的问题。假设我们有表 A、B 和粘合表 A_B。我希望集合 A.bs 按字段 B.date 排序。当我运行查询时,我收到异常消息:
org.hibernate.exception.SQLGrammarException: ERROR: column b1_.date does not exist
问题是休眠创建的查询是在 A_B 表中而不是 B 表中搜索列。我一直在网上搜索并遇到同样的问题,但没有正确的答案(https://forum.hibernate.org/viewtopic.php?f=1&t=950032&sid=b7e3e9ff23a6da3b5fff2f5336d3bb1b)但同时处理类似问题的问题和答案是说这样的配置没有问题(休眠:排序多对多映射)。在@OrderBy 子句中,我尝试使用域对象中的字段名、数据库中的列名,但无济于事。这个问题有什么进展吗?任何帮助或提示表示赞赏。谢谢。:)
这些是详细信息:
@Entity
@Table(name="A")
public class A implements java.io.Serializable {
private Set<B> bs = new HashSet<B>(0);
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="A_B", joinColumns = {
@JoinColumn(name="a_id", nullable=false, updatable=false) }, inverseJoinColumns = {
@JoinColumn(name="b_id", nullable=false, updatable=false) })
@OrderBy(clause = "date desc")
public Set<B> getBs() {
return this.bs;
}
}
@Entity
@Table(name="B")
public class B implements java.io.Serializable {
private Date date;
/* setters and getters */
}
我省略了 ID 和其他细节。如果我删除 @OrderBy 注释,一切都会像魅力一样。
有关我的 getter on date 的更多详细信息:
@Temporal(TemporalType.TIMESTAMP)
@Column(name="date", nullable=false, length=29)
public Date getDate() {
return this.date;
}