我有一个实体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>
因此,Transaction具有Card的外键,但是Card在我的数据库模式中未引用Transaction。这可能是错误的原因吗?该如何解决?