2

@OrderBy アノテーションを使用した休止状態の多対多マッピングに関して質問があります。テーブル A、B、およびグルー テーブル A_B があるとします。コレクション A.bs をフィールド B.date でソートしたい。クエリを実行すると、次のような例外が発生します。

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

問題は、Hibernate が B テーブルではなく A_B テーブルの列を検索するクエリを作成することです。私はウェブを検索していて、適切な回答なしで同じ質問に遭遇しました(https://forum.hibernate.org/viewtopic.php?f=1&t=950032&sid=b7e3e9ff23a6da3b5fff2f5336d3bb1b)が、同時に同様の問題を扱う問題と答えは、そのような構成には問題がないということでした ( Hibernate : Sorting ManyToMany mapping )。@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;
}
4

1 に答える 1

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;
}
于 2013-08-28T10:21:46.000 に答える