org.hibernate.QueryException:无法解析属性:事务

时间:2019-02-12 11:06:23

标签: java hibernate jpa querydsl

我有一个实体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。这可能是错误的原因吗?该如何解决?

0 个答案:

没有答案