Hibernate 使用orderby子句休眠多对多映射不起作用

Hibernate 使用orderby子句休眠多对多映射不起作用,hibernate,many-to-many,sql-order-by,Hibernate,Many To Many,Sql Order By,我有一个关于使用@OrderBy注释的hibernate多对多映射的问题。假设我们有表A、B和粘合表A_B。我希望集合A.B按字段B.date排序。当我运行查询时,我得到一个异常,它说: org.hibernate.exception.SQLGrammarException: ERROR: column b1_.date does not exist 问题是hibernate创建的查询是在A_B表中搜索列,而不是在B表中搜索列。我一直在网上搜索,遇到了同样的问题,但没有正确的答案(),但同时也

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

org.hibernate.exception.SQLGrammarException: ERROR: column b1_.date does not exist
问题是hibernate创建的查询是在A_B表中搜索列,而不是在B表中搜索列。我一直在网上搜索,遇到了同样的问题,但没有正确的答案(),但同时也遇到了处理类似问题的问题,答案是这样的配置没有问题()。在@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 */
}

在代码中,日期不由
@列
注释

应该是这样的:

@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;
}
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“A_B”,joinColumns={
@JoinColumn(name=“a_id”,nullable=false,updateable=false)},inverseJoinColumns={
@JoinColumn(name=“b_id”,nullable=false,updateable=false)})
@javax.persistence.OrderBy(“日期描述”)
公共集getBs(){
返回此文件。b;
}

我在getter方法中有@Column注释。这就是hibernate工具对DB中的源代码进行反向工程的方式:@Temporal(TemporalType.TIMESTAMP)@Column(name=“date”,nullable=false,length=29)public date getDate(){return this.date;}我更改了答案。现在检查:DThx,它有帮助。:)我自己也没办法弄清楚这样的细微差别。:)
@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;
}