首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate @Formula减法和加法

Hibernate @Formula减法和加法
EN

Stack Overflow用户
提问于 2016-02-28 06:11:07
回答 1查看 1K关注 0票数 1

我想使用Hibernate @Forumla注解来计算字段的值:

余额= intialBalance +(sum(借方类型的交易记录)-(sum(贷方类型的交易记录))

我有表事务:

代码语言:javascript
复制
CREATE TABLE transaction
(
  idtransaction serial NOT NULL,
  directionoftransaction character varying NOT NULL,
  amount numeric,
  observation text,
  datetransaction timestamp without time zone,
  idtypeoftransaction bigint,
  idaccount bigint,
  iduser bigint,
  CONSTRAINT prk_constraint_transaction PRIMARY KEY (idtransaction),
  CONSTRAINT fk_transaction_idaccount FOREIGN KEY (idaccount)
      REFERENCES account (idaccount) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_transaction_idtypeoftransaction FOREIGN KEY (idtypeoftransaction)
      REFERENCES typeoftransaction (idtypeoftransaction) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_transaction_iduser FOREIGN KEY (iduser)
      REFERENCES tuser (iduser) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT transaction_observation_key UNIQUE (observation)
)

Her是帐户实体

代码语言:javascript
复制
@Entity
@Table(name = "account")
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "account_seq_gen")
    @SequenceGenerator(name = "account_seq_gen", sequenceName = "account_idaccount_seq", initialValue = 1, allocationSize = 1)
    @Column(name = "idaccount", unique = true, nullable = false)
    private Long idAccount;

    @Column(name = "namebank")
    private String nameBank;
    @Column(name = "accountnumber")
    private String accountNumber;
    @Column(name = "initialBalance")
    private BigDecimal intialBalance;
    @Formula("intialBalance + (select amount from Transaction t where directionoftransaction = 'CREDIT') minus (select amount from Transaction t where directionoftransaction = 'DEBIT')")
    private BigDecimal balance;


}

这给出了一个语法错误,那么我该如何构造查询呢?

EN

回答 1

Stack Overflow用户

发布于 2016-02-28 22:24:36

在更正了查询的语法之后,我找到了解决方案。

代码语言:javascript
复制
@Entity
@Table(name = "account")
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "account_seq_gen")
    @SequenceGenerator(name = "account_seq_gen", sequenceName = "account_idaccount_seq", initialValue = 1, allocationSize = 1)
    @Column(name = "idaccount", unique = true, nullable = false)
    private Long idAccount;

    @Column(name = "namebank")
    private String nameBank;
    @Column(name = "accountnumber")
    private String accountNumber;
    @Column(name = "initialBalance")
    private BigDecimal intialBalance;
    @Formula("COALESCE(initialSolde,0) + ((select COALESCE(sum(t.amount),0) from transaction t where t.idaccount = idAccount and t.directionoftransaction = 'CREDIT') - " +
            "(select COALESCE(sum(d.amount),0) from transaction d where d.idaccount = idAccount and d.directionoftransaction = 'DEBIT'))")
    private BigDecimal balance;


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35676067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档