У меня есть 2 класса с отношениями «один ко многим».
Клиент (класс) имеет много транзакций (класс)
public class Customer {
@Id
private Long clientId;
private String name;
@OneToMany
private List<Transactions> transactions;
}
public class Transactions {
@JoinColumn(name = "clientId")
private Transactions transactions;
private int statusType;
private String amount;
}
int dynamicValue = 1003;
CriteriaQuery<Customer> criteriaQuery = getBuilder().createQuery(Customer.class);
Root<Customer> customersRoot = criteriaQuery.from(Customer.class);
Join<Customer, Transactions> transactions = customersRoot.join("transactions");
TypedQuery<Customer> query = em.createQuery(criteriaQuery.select(customerRoot).where(getBuilder().equal(transactions.get("statusType"), dynamicValue)));
List<Customer> customerList = (List<Customer>) query.getResultList();
У меня есть 2 данные из БД:
Таблица клиентов
ClientId | Name |
1 | James |
2 | Eli |
Таблица транзакций:
ClientId | Status Type| Amount| TransactionId |
1 | 1002 | 100 | 1 |
1 | 1003 | 200 | 2 |
Мне нужно сделать мой запрос выше, чтобы принять несколько параметров (динамический). Эти параметры будут поступать из атрибутов клиента, таких как имя, некоторые параметры будут поступать из класса транзакций. Однако, когда я пытался выполнить мой код выше, он всегда получает 1-ю запись (1002) в моей базе данных, что неверно.
Пожалуйста, дайте мне немного света.
Вопросы:
- Как можно добиться наличия нескольких динамических параметров в построителе критериев?
- Что не так с моим запросом, почему он всегда получает первую запись?