3

私は次のエンティティを持っています

@Entity
public class Task {

private List<TaskParameter> taskParameters = Collections.emptyList();

@ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "taskParameters", joinColumns = @JoinColumn(
            name = "task_id"))
    public List<TaskParameter> getTaskParameters() {
        return taskParameters;
    }

}

TaskParameterエンティティは、以下に定義されている埋め込み可能オブジェクトです。

@Embeddable
public class TaskParameter {
        private String name;
    private String value;

}

このメソッドでSearchAPIを使用しています

@Transactional(readOnly = true) 
public List<Task> getTaskByRequisitionId(String requisitionId) {
    List<Task> tasks;
    Search search = new Search();
    search.addFilterAll("taskParameters",Filter.equal("value", requisitionId));
    tasks = taskDao.search(search);
    return tasks;
}

しかし例外を取得します

[INFO] 2013-02-28 10:20:06,641 [btpool0-14] ERROR org.hibernate.hql.PARSER - <AST>:0:0: unexpected end of subtree
[INFO] 2013-02-28 10:20:06,642 [btpool0-14] ERROR org.hibernate.hql.PARSER - <AST>:0:0: expecting "from", found '<ASTNULL>'

[INFO] org.hibernate.hql.ast.QuerySyntaxException: unexpected end of subtree [select _it from com.planetsystems.procnet.model.jbpm.Task _it where not exists (from _it.taskParameters _it1 where not (_it1.value = :p1 and _it1.value is not null))]

私はgenericdao1.1.0とhibernate3.5.6-Finalを使用しています

4

1 に答える 1

0

ここでの問題はおそらく、genericdao フレームワークが @ElementCollection のケースを処理できないことだと思います。このケースは今まで考えたこともありませんでした。取り上げてくれてありがとう。おそらく、将来のリリースでフレームワークに追加できるでしょう。

それまでの間、ネイティブの Hibernate クエリを使用するメソッドを作成してください。getSession() を使用して、DAO で Hibernate セッションを直接取得できます。動作するようになったら、動作するようになった HQL クエリでこのスレッドを更新してください。これを使用して、機能をフレームワークに組み込む方法を見つけることができます。

ありがとう。

于 2013-02-28T17:06:23.977 に答える