У меня есть сущность Transaction
и сущность Card
.С каждой картой может быть связано несколько транзакций, поэтому с точки зрения Transaction
это отношение многие-к-одному.Это выглядит так.
Transaction.java
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "CARD_ID")
private Card card;
Card.java
@OneToMany(mappedBy = "card", cascade = CascadeType.ALL,
orphanRemoval = true,
fetch = FetchType.LAZY)
private Set<Transaction> transactions = new HashSet<>();
Мне нужнонаписать запрос, который даст мне все карты, которые имеют по крайней мере одну связанную транзакцию.Я попытался сделать это следующим образом, используя Query DSL.
public List<Card> getByInstitutionIdWhereTransactionExists(long institutionId) {
final JPAQuery q = new JPAQuery(entityManager)
.setHint(
"javax.persistence.loadgraph",
entityManager.getEntityGraph("card-with-transactions-entity-graph"));
try {
return getByInstitutionIdWhereTransactionExists(q, institutionId);
} catch (NoResultException e) {/* Don't throw when no result. */}
return Collections.emptyList();
}
private List<Card> getByInstitutionIdWhereTransactionExists(
JPAQuery q, long institutionId) {
return q
.from(card)
.where(
card.cardRange.institution.id.eq(institutionId)
.and(card.transactions.isNotEmpty()))
.list(card);
}
Я попытался использовать его следующим образом:
final List<Card> cardsWithTransactions = cardDAO.getByInstitutionIdWhereTransactionExists(1L);
Однако это привело к исключению: org.hibernate.QueryException: не удалось разрешить свойство: транзакции
Моя схема базы данных выглядит следующим образом:
<createTable tableName="transaction">
<column name="id" type="bigint" />
<column name="transaction_status"
<column name="card_id" type="bigint" />
</createTable>
Итак, Транзакция имеет внешний ключ Card, а Card -не ссылаться на транзакции в моей схеме базы данных.Может ли это быть причиной ошибки?Как решить эту проблему?