次の名前付きクエリ
<named-query name="fix.getByProblem">
<query>
SELECT f
FROM Fix f JOIN f.solved s
WHERE s.id IN :ids
</query>
</named-query>
指定された問題の少なくとも 1 つを解決するすべての修正を返すことになっていますが、エラー メッセージで失敗します
例外の説明: クエリのコンパイル中にエラーが発生しました [fix.getByProblem]:
SELECT f FROM Fix f JOIN f.solved s WHERE s.id IN :ids
]、不明な状態またはクラス [ProblemHandle] の関連付けフィールド [id]。
モデルは次のとおりです。 (簡略化)
修正.java
@ElementCollection
@CollectionTable(name = "FIX_SOLVED", schema = SCHEMA_NAME, joinColumns = {@JoinColumn(name = "SOURCE_VERSION", referencedColumnName = "version")})
@AttributeOverrides({ @AttributeOverride(column = @Column(name = "SOLVED_ID", nullable = true), name = "id") })
private Collection<ProblemHandle> solved;
問題ハンドル.java
@Embeddable
@Access(AccessType.PROPERTY)
public class ProblemHandle {
private Long id;
...
}
問題.java
@Entity(name = Problem.ENTITY_NAME)
@Access(value = AccessType.FIELD)
@Table(name = Problem.TABLE_NAME, schema = Problem.SCHEMA_NAME)
@IdClass(ProblemHandle.class)
public class Problem {
public static final String ENTITY_NAME = "problem";
public static final String SCHEMA_NAME = "X";
public static final String TABLE_NAME = "PROBLEM";
@Id
@Column(name="id", nullable = false)
private Long id;
...
}
ハンドルを使用するなど、パターンを変更せずにそれを達成するにはどうすればよいですか?