【发布时间】:2014-03-05 09:32:51
【问题描述】:
我有一个带有实体的 Spring Data 实现
@Entity
public class Account extends AbstractEntity {
...
@OneToMany(mappedBy = "account")
private Set<AccountTransaction> accountTransactions;
还有AccountTransactions
@Entity(name="AccountTransactions")
public class AccountTransaction extends AbstractEntity {
/**
*
*/
private static final long serialVersionUID = -7045838402463741959L;
@ManyToOne(optional = false)
@JsonIgnore
private Account account;
@Column
@Enumerated(EnumType.ORDINAL)
private TransactionType transactionType;
@Column
private BigDecimal amount;
还有我正在尝试执行聚合查询的存储库:sum(amount)
然而结果是null
public interface AccountTransactionRepository extends
CrudRepository<AccountTransaction, Long> {
// @Query(value =
// "select sum(amount) from AccountTransaction where account.id = ?1")
@Query(value = "SELECT sum(at.amount) FROM AccountTransactions at WHERE at.account.id = :accountId")
public BigDecimal getAccountBalance(@Param("accountId") Long accountId);
}
我需要做什么才能得到amount 列的BigDecimal 总和?
*更新*
我能够让查询工作,将其更改为 nativeQuery,如下所示:
@Query(value = "SELECT sum(amount) FROM account_transaction WHERE account_id = :accountId", nativeQuery = true)
public BigDecimal getAccountBalance(@Param("accountId") Long accountId);
这显然不太理想……因为我不想为每个查询都写这个……
【问题讨论】:
-
我没有看到任何
JoinColumn注释来定义Account和AccountTransaction之间的关系,您的数据库列是否使用了适当的默认值? -
我认为
@OneToMany(mappedBy = "account")和@ManyToOne(optional = false)选项负责建立关联......到目前为止,其他所有内容都正常加载...... -
AccountTransaction中的外键名称是什么?这取决于名称是否使用适当的默认值 -
@KevinBowersox 在数据库中创建后应该是
account_id,在@Entity注解类中只是Account...
标签: hibernate spring-data