如何使用hibernate从数据库中获取数据时过滤数据?

时间:2012-05-16 14:03:52

标签: java mysql hibernate views hibernate-mapping

我有多个包含大量数据的表。我只提到与问题有关的事情。为了在jsp上渲染数据,我只需要来自不同表的选择性数据。

在参考旅行假期时,假设我必须检索并呈现假日套餐名称,行程持续时间和每个默认值的总价格。

  • 假日套餐名称位于表格HolidayPackage(ID,名称)
  • 行程中的行程持续时间行程Itinerary(idPkg,idItinerary,dayNum)=(给定包裹的行程行的SUM聚合)
  • 价格在两个不同的表格中定义基本价格和总价格

      

    =(总和(基数(idPkg)+总数(idPkg)))

  •   
  如何从这些数据库表中检索选择性数据,以显示给定假日包的名称,行程持续时间和总价?

我正在使用Hibernate和mysql作为我的数据库。

思想:

  

我可以使用视图将数据提取到我的自定义java对象Result中,其中Result定义为:

class Result{
 String name;
 Intger itineraryDuration;
 BigDecimal totalPrice;
}

另外,我可以使用函数作为视图中列值的定义吗?

1 个答案:

答案 0 :(得分:1)

我对视图的处理是创建一个不可变的hibernate模型类和相关的DAO来查询模型类。

我按如下方式注释模型类:

@Entity
@Immutable
@Table(name = "CLASSIFICATION_LABELS_V", schema = "CORPORATE")

我还将setter设置为protected,但这是可选的。

如果视图的结构类似于现有模型类,则可以使用命名查询并使用resultClass属性将其映射到模型。以下是针对Oracle的,所以如果使用其他任何东西,查询参数会有所不同。

@NamedNativeQueries({
    @NamedNativeQuery(name = "create_product_from_template", query = "call pkg_authoring.sp_create_prod_from_template(?, :productId, :templateId)", resultClass = TblProduct.class, callable = true)
})

在休眠状态下,您可以使用以下函数:

@Formula(value = "(select fnHasProducts(customerId) from dual)")
    @AccessType("property")
    private Integer products = 0;

@Formula(value = "(select fnAssigneeForProduct(productId) from dual)")
    private Integer assignee = 0;