Java类变量';来自其他变量的s声明

Java类变量';来自其他变量的s声明,java,hibernate,Java,Hibernate,我有一个java域类,它在数据库中为一个表建模,我有两个字段 双重预算1 双预算2 我需要在类中添加另一个字段作为成员变量 Double totalBudget是budget1和budget2的一部分,我如何在java8中做到这一点 @Formula("(SELECT SUM(c.budget1) FROM table1) private Double budget1; @Formula("(SELECT SUM(c.budget2) FROM table2) private Double b

我有一个java域类,它在数据库中为一个表建模,我有两个字段 双重预算1 双预算2 我需要在类中添加另一个字段作为成员变量 Double totalBudget是budget1和budget2的一部分,我如何在java8中做到这一点

@Formula("(SELECT SUM(c.budget1) FROM table1)
private Double budget1;

@Formula("(SELECT SUM(c.budget2) FROM table2)
private Double budget2;

@Transient
private Double totalBudget = budget1 + budget2;

这给了我一个错误

您不需要可以从其他字段推断其值的字段。您应该使用不带字段的getter:

public Double getTotalBudget()
{
    return budget1+budget2;
}
或者,如果对象是不可变的,即使是查询:

@Formula("(SELECT SUM(c.budget1)+SUM(c.budget2) FROM table2)")
private Double totalBudget;

当然,您应该在数据库中使用
BigDecimal
,而不是
Double
,用于金钱和
DECIMAL

这段代码会给您带来哪些错误?原因是:org.hibernate.InstantiationException:无法实例化测试对象是否确实需要该字段?我会用一个方法返回它们的总和。请记住,每次执行
budget1
budget2
时,您都应该更新
totalBudget
changed@Kanub,添加完整的堆栈跟踪,请不要执行任何操作。(1) 您应该在数据库中使用
BigDecimal
,而不是
Double
,用于货币和
DECIMAL
;(2) 您不需要可以从其他字段推断其值的字段。您所需要的只是返回值之和的字段的getter。或者(3)如果对象是不可变的,那么您需要计算SQL语句中获取这些值的总和。运行总和查询将是一个非常糟糕的想法。当hibernate获取对象时,它将已经被填充。为什么要额外计算?@PritamBanerjee是的,它已经被三个查询的结果填充了。计算必须在某个地方进行。相反,他最好得到另外两个字段,然后得到totalBudget@PritamBanerjee“非常糟糕的想法”和“更好”不是事实陈述或论据。