我对 hibernate 相当陌生,我遇到了一个问题,我试图用非常基本的代码来克服这个问题,只是为了让它能够工作。这是我所拥有的:
@Entity
@Table(name="budgetfunds")
public class BudgetItem implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="budgetFundsID")
private int budgetFundID;
@Column(name="budgetYear")
private int budgetYear;
@ManyToOne
@JoinColumn(name = "semesterID")
private Semester semester;
@ManyToOne
@JoinColumn(name = "fundCategoryID")
private FundCategory fundCategory;
@OneToMany
@JoinColumns({
@JoinColumn(name = "fundCategoryID", referencedColumnName = "fundCategoryID"),
@JoinColumn(name = "semesterID", referencedColumnName = "semesterID"),
@JoinColumn(name = "year", referencedColumnName = "budgetYear")
})
private Set<Fund> fundItems;
@Column(name="budgetID")
private int budgetID;
@Column(name="budgetFundAmount")
private BigDecimal fundAmount;
@Formula(value = "select sum(f.fundAmount) from Fund f where f.fundCategoryID = fundCategoryID and f.semesterID = semesterID and f.year = budgetYear")
private BigDecimal requestedAmount;
...
}
这是我的问题。我有一组fundItems,我需要将其求和并设置为该对象的属性,以便可以在jsp 中引用它。最后一个属性是我尝试这样做的...唯一的问题是,它不是有效的 sql,因为它不知道 seasonID、budgetYear 和fundCategoryID 值来自何处。有没有办法修复此查询以每个对象工作?
此外,如果有一种更简单的方法可以在不完全重构代码/数据库的情况下完成此操作,请告诉我。
最佳答案
到处搜索后,我终于找到了某人关于hibernate使用“派生属性”的教程。
来源如下:
http://blog.eyallupu.com/2009/07/hibernate-derived-properties.html
这是我的问题的具体解决方案:
@Formula(value = "(select sum(f.fundAmount) from Fund f " +
"where f.fundCategoryID = fundCategoryID " +
"and f.semesterID = semesterID "+
"and f.year = budgetYear)")
private BigDecimal requestedAmount;
为了解释这是如何工作的,我将引用上面链接中的一段内容:
...by not declaring an alias on a column (the [fundCategoryID, semesterID, and budgetYear] columns in here), I can reference the owning entity columns - this is usually required when my formula needs to fetch associated entities...
关于java - Hibernate 在公式注释中使用对象的属性字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504700/