ユーザーがフォームを作成できるようにするアプリケーションを作成しています。フォームは別のユーザーが読み込んで入力し、そのユーザーの送信を表示できます。
フォームにはフィールドが入力されています。ユーザーがフォームに入力すると、Submission データベース オブジェクトが作成され、この送信は FieldValue オブジェクトと 1-M の関係を持ちます。FieldValue オブジェクトには Field への FK があり、ユーザーの入力の String を格納します。この設計を使用して送信を表示するには、送信に関連付けられた FieldValues を読み取り、関連付けられた Field オブジェクトを読み込み、ユーザーの入力を入力します。この意味ではすべてがうまく機能しますが、私の問題はこれらの提出物を探すことです。
私は、検索対象のフォームのフィールドに基づいて検索フィールドを動的に作成する検索ページに取り組んでいます。たとえば、firstName と lastName です。ユーザーが firstName = j lastName = smith で検索するとします。これらの検索フィールドを使用して、FK が firstName に一致し、テキストに「j」が含まれる FieldValue を持ち、FK が lastName に一致し、テキストに「smith」が含まれる DIFFERENT FieldValue を持つすべての送信を検索したい
次のコードのバリエーションを試しています。
Expression exp = ExpressionFactory.matchExp(Submission.FORM_PROPERTY, _formId);
for (SearchField searchField : searchFields)
{
Expression fieldExp = ExpressionFactory.matchExp(Submission.FIELD_VALUE_PROPERTY +"." + FieldValue.FIELD_PROPERTY, searchField.getFieldId());
fieldExp = fieldExp.andExp(ExpressionFactory.likeIgnoreCaseExp(Submission.FIELD_VALUE_PROPERTY +"." + FieldValue.TEXT_PROPERTY, "%" + searchField.getText() + "%" ));
exp = exp.joinExp(Expression.AND, fieldExp);
}
SelectQuery query = new SelectQuery(Submission.class, exp);
私がやろうとしているのは、各検索フィールドをループして、提出物に含まれている必要がある FieldValues のリストに追加することです。これの問題は、これらの値をすべて持つ 1 つの FieldValue を検索し続けるため、明らかに失敗することです。別のクラス内で 1-M になる可能性のある検索を行ったことがないので、ここで何かが欠けていると思います。どんな助けでも大歓迎です。何が起こっているのかを説明しようとする小さな小説で申し訳ありませんが、それは私にとって少し普通ではありません.