Java Hibernate在公式批注中使用对象的属性字段

Java Hibernate在公式批注中使用对象的属性字段,java,hibernate,Java,Hibernate,我对hibernate还比较陌生,我遇到了一个问题,我正试图用非常基本的代码来克服这个问题,以便使它能够正常工作。以下是我所拥有的: @Entity @Table(name="budgetfunds") public class BudgetItem implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="budgetFundsID")

我对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,因为它不知道semesterID、budgetYear和fundCategoryID值来自何处。有没有办法将此查询修复为每个对象都可以工作

另外,如果有一种更简单的方法可以在不完全重构代码/数据库的情况下实现这一点,请告诉我

以下是数据库和关系图:

在到处搜索之后,我终于找到了关于使用派生属性的hibernate的教程。 资料来源如下:

以下是我的问题的具体解决方案:

@Formula(value = "(select sum(f.fundAmount) from Fund f " + 
    "where f.fundCategoryID = fundCategoryID " +
    "and f.semesterID = semesterID "+
    "and f.year = budgetYear)")
private BigDecimal requestedAmount;
为了解释其工作原理,我将引用上面链接中的一节:

…通过不在此处的[fundCategoryID、semesterID和budgetYear]列上声明别名,我可以引用拥有的实体列-当我的公式需要获取关联实体时,通常需要这样做


谢谢分享,还有一个。将在一些测试后更新我的答案。删除我的答案,因为我可能会造成不必要的混乱。错误在于查询使用的是budgetFundID而不是budgetFundsID。您可以在此处尝试更新-@Formulavalue=从基金f中选择sumf.fundAmount,其中f.fundCategoryID=从预算基金b中选择b.fundCategoryID,其中b.budgetFundsID=budgetFundsID=budgetFundsID和f.semesterID=从预算基金c中选择c.semesterID,其中c.budgetFundsID=budgetFundsID=budgetFundsID和f.year=budgetYear,这应该会有所帮助好虽然我更喜欢你的方法。我很想知道这是否也能正常工作。@Madhusudanareddysunapu我现在真的没有办法测试它,因为我们对数据库的布局做了一些更改,这会导致查询不再工作。最终,我加入了另一个表,以获取semesterID、fundCategoryID和year值,并使用与这些字段匹配的条目的ID返回fundamount。没问题。如果你有机会在任何时候进行测试,我很想知道结果。