2016-02-27 3 views
0

Я хочу, чтобы вычислить значение поля с помощью Hibernate @Forumla аннотации:Спящего @Formula и вычитание дополнение

баланса = intialBalance + (сумма (операции типа дебета) - (сумма сделки (типа кредита))

у меня есть таблица сделки:

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) 
) 

Ее это учетная запись Entity

@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; 


} 

это дает синтаксическую ошибку, так как я могу построить запрос?

ответ

0

Я нашел решение после исправления синтаксиса запроса.

@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; 


} 
Смежные вопросы