0

次の名前付きクエリ

 <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;
...
}

ハンドルを使用するなど、パターンを変更せずにそれを達成するにはどうすればよいですか?

4

1 に答える 1

0

@Access(AccessType.PROPERTY) があるため、属性の名前は変数ではなく get メソッドに由来します。get メソッドの名前は何ですか?

@Access(AccessType.PROPERTY) を削除してみてください

また、どのバージョンを使用していますか?2.4 リリースを使用してみてください。

于 2012-08-27T14:53:25.563 に答える