Java Hibernate@公式减法和加法
我想使用Hibernate@Forumla注释计算字段值: 余额=初始余额+(总和(借方类型的交易)-(总和(贷方类型的交易)) 我有一个表事务:Java Hibernate@公式减法和加法,java,sql,hibernate,postgresql,Java,Sql,Hibernate,Postgresql,我想使用Hibernate@Forumla注释计算字段值: 余额=初始余额+(总和(借方类型的交易)-(总和(贷方类型的交易)) 我有一个表事务: CREATE TABLE transaction ( idtransaction serial NOT NULL, directionoftransaction character varying NOT NULL, amount numeric, observation text, datetransaction timesta
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
@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;
}
这会导致语法错误,因此如何构造查询?在更正查询语法后,我找到了解决方案
@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;
}
在更正了查询的语法之后,我找到了解决方案
@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;
}