用orderby子句进行hibernate多对多映射是行不通的

时间:2013-08-28 10:11:10

标签: hibernate many-to-many sql-order-by

我有一个关于使用@OrderBy注释的hibernate多对多映射的问题。假设我们有表A,B和胶水表A_B。我想要收集A.bs按字段B.date排序。当我运行查询时,我得到异常说:

org.hibernate.exception.SQLGrammarException: ERROR: column b1_.date does not exist

问题是hibernate创建的查询正在搜索A_B表中的列而不是B表中的列。我一直在网上搜索并在没有正确答案的情况下遇到同样的问题(https://forum.hibernate.org/viewtopic.php?f=1&t=950032&sid=b7e3e9ff23a6da3b5fff2f5336d3bb1b)但同时处理类似问题的问题和答案都说这样的配置没有问题({{3} })。在@OrderBy子句中,我尝试使用域对象中的字段名称,DB中的列名但无济于事。这个问题有什么进展吗?任何帮助或提示赞赏。谢谢。 :)

这些是详细信息:

@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注释,一切都像魅力一样。

关于我的吸气器的更多细节:

@Temporal(TemporalType.TIMESTAMP)
@Column(name="date", nullable=false, length=29)
public Date getDate() {
    return this.date;
}

1 个答案:

答案 0 :(得分:1)

在您的代码日期中未@Column注释。

应该看起来像:

@Entity
@Table(name="B")
public class B implements java.io.Serializable {

    @Column(name = "date")
    private Date date;

    /* setters and getters */
}

编辑:

我创建了相同的映射并发现了问题。

您正在使用org.hibernate.annotations.OrderBy。有了这个注释,我就有了完全相同的问题。

通常我正在使用javax.persistence.OrderBy,一切正常。

所以尝试以这种方式进行映射:

@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) })
@javax.persistence.OrderBy("date desc")
public Set<B> getBs() {
    return this.bs;
}