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

时间:2018-03-27 05:03:20

标签: java hibernate

我对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值的来源。有没有办法修复此查询以每个对象

此外,如果没有完全重构代码/数据库有更简单的方法,请告诉我。

这是数据库和关系图: enter image description here

1 个答案:

答案 0 :(得分:2)

在搜索了整个地方之后,我终于找到了某人关于使用“派生属性”进行休眠的教程 这是来源:

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;

为了解释这是如何工作的,我将引用上面链接中的一节:

  

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