0

以前は機能していたこのクエリは、機能しなくなりました。(私は注釈に切り替えています。これは、残っている 2 つの壊れたテストのうちの 1 つです。)

私は3つのテーブルを持っています:

+---------------+
| Competition   | 
+---------------+
| competitionId | 
| . . .         | 
+---------------+

+---------------+
| Competitor    | 
+---------------+
| competitorId  | 
| . . .         | 
+---------------+

+------------------------+
| CompetitionCompetitors | 
+------------------------+
| competitionId          | 
| competitorId           | 
+------------------------+

そして、以前は機能していたコード/クエリは

Query query = session.createQuery(
    "select c.id from Competition c join c.competitors co where co.id = :competitorId" );
query.setParameter( "competitorId", competitor.getCompetitorId() );
List list = query.list();

以下は、Hibernate からの前述の SQL ログの一部と、エラー メッセージです。

Hibernate: update db.competition set competitorId=? where competitionId=?
Hibernate: update db.competition set competitorId=? where competitionId=?
Hibernate: update db.competition set competitorId=? where competitionId=?
17:12:49,232  WARN JDBCExceptionReporter:233 - SQL Error: 1054, SQLState: 42S22
17:12:49,240 ERROR JDBCExceptionReporter:234 - Unknown column 'competitorId' in 'field list'

(正直に言うと、クエリで更新が行われるのを見て驚きました。)

コンペティションの注釈は次のとおりです。

@OneToMany( targetEntity = Competition.class )
@JoinColumn( name = "competitorId" )
private Set< Competitor > competitors = new TreeSet< Competitor >();

私は何を怒らせましたか?

4

1 に答える 1

1

これはおそらくコピーと貼り付けの小さなエラーです。作成したクエリは「query」ですが、実行したクエリは「otherQuery」ですか?

しかし、問題は targetEntity の値にあると私は信じています。仕様から:

関連付けの対象となるエンティティ クラス。コレクション値のリレーションシップ プロパティが Java ジェネリックを使用して定義されている場合のみ、オプションです。それ以外の場合は指定する必要があります。

あなたの場合、それを指定するCompetitor.classか、省略する必要があります。検索されるデフォルトは is であるため、およびの値JoinTableとともに注釈を指定する必要があります。joinColumninverseJoinColumnJoinTableCompetitor_Competition

@OneToMany
@JoinTable(name = "CompetitionCompetitors", inverseJoinColumns={@JoinColumn(name="competitorId")}, joinColumns={@JoinColumn(name="competitionid")}
private Set< Competitor > competitors = new TreeSet< Competitor >();

これらの値を調べているだけの場合、なぜこれらの更新ステートメントが実行されているのかわかりません。

于 2012-08-27T01:22:02.893 に答える