`
lifaming15
  • 浏览: 64202 次
  • 来自: ...
文章分类
社区版块
存档分类

Hibernate高级技巧:数据过滤器-使用XML和标注

 
阅读更多

Hibernate数据过滤器是一个创新的方法,以一种更具可重用性的方式和“可视化”规则来过滤从数据库获取的数据。数据过滤器有一个唯一的名字,可进行全局访问,并能接受参数值用于过滤规则。可以在Hibernate session中启用或禁用数据过滤。

请看下面的Hibernate数据过滤器示例。

在这个示例程序中,定义了一个数据过滤器,使用指定的日期过滤集合数据。Hibernate数据过滤器可以使用XML映射文件实现,也可以使用标注实现。

1、在XML映射文件中实现Hibernate数据过滤器

使用“filter-def”关键字定义一个数据过滤器,并接受一个日期参数。

<filter-def name="stockRecordFilter">
  <filter-param name="stockRecordFilterParam" type="date"/>
</filter-def>

下面的XML映射文件中,声明过滤器并将其赋予set集合。

<hibernate-mapping>
  <class name="com.xuejava.common.Stock" table="stock" catalog="xuejava">
   ...
   <set name="stockDailyRecords" inverse="true" table="stock_daily_record">
     <key>
       <column name="STOCK_ID" not-null="true" />
     </key>
     <one-to-many class="com.xuejava.common.StockDailyRecord" />
     <filter name="stockRecordFilter" condition="date >= :stockRecordFilterParam"/>
   </set>
  </class>

  <filter-def name="stockRecordFilter">
    <filter-param name="stockRecordFilterParam" type="date"/>
  </filter-def>
</hibernate-mapping>

在condition=”date >= :stockRecordFilterParam”中,“date”是“StockDailyRecord”的一个属性。

2、在标注(注解)中实现Hibernate数据过滤器

使用“@FilterDef”关键字定义一个数据过滤器,并使用“@ParamDef”接收一个日期参数。

@FilterDef(name="stockRecordFilter",
parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )

下面是完整的标注示例,其中声明了一个数据过滤器并将其赋予set集合。

...
@Entity
@FilterDef(name="stockRecordFilter", parameters=@ParamDef( name="stockRecordFilterParam", type="date" ) )
@Table(name = "stock", catalog = "xuejava")
public class Stock implements java.io.Serializable {
  ...
  @OneToMany(fetch = FetchType.LAZY, mappedBy = "stock")
  @Filter(
    name = "stockRecordFilter",
    condition="date >= :stockRecordFilterParam"
  )
  public Set<StockDailyRecord> getStockDailyRecords() {
    return this.stockDailyRecords;
  }

在condition=”date >= :stockRecordFilterParam”中,“date”是“StockDailyRecord”的一个属性。

3、怎样启用和禁用数据过滤

启用数据过滤:

Filter filter = session.enableFilter("stockRecordFilter");
filter.setParameter("stockRecordFilterParam", new Date());

禁用数据过滤:

session.disableFilter("stockRecordFilter");

4、应用和实现数据过滤器

下面的代码片段演示了怎样应用和实现数据过滤器。

  Session session = HibernateUtil.getSessionFactory().openSession();

  System.out.println("****** Enabled Filter ******");

  Filter filter = session.enableFilter("stockRecordFilter");
  filter.setParameter("stockRecordFilterParam", new Date());

  Stock stock = (Stock)session.get(Stock.class, 2);
  Set<StockDailyRecord> sets = stock.getStockDailyRecords();

  for(StockDailyRecord sdr : sets){
    System.out.println(sdr.getDailyRecordId());
    System.out.println(sdr.getDate());
  }

  System.out.println("****** Disabled Filter ******");

  session.disableFilter("stockRecordFilter");
  //清除已加载的实例,重新获得Stock(只是为了演示)
  session.evict(stock);

  Stock stock2 = (Stock)session.get(Stock.class, 2);
  Set<StockDailyRecord> sets2 = stock2.getStockDailyRecords();

  for(StockDailyRecord sdr : sets2){
    System.out.println(sdr.getDailyRecordId());
    System.out.println(sdr.getDate());
  }

输出结果如下:

****** Enabled Filter ******
58
2011-07-31
****** Disabled Filter ******
60
2011-07-02
58
2010-07-31
63
2010-07-23
61
2010-07-03
...

在这个示例中(包括XML映射和标注),在启用了过滤器后,所有的“StockDailyRecord”集合都由参数日期所过滤。

分享到:
评论

相关推荐

    struts2-hibernate3-spring整合需要的全部jar包

    3. 配置web.xml,设置过滤器和监听器,使Spring和Struts2协同工作。 4. 在Action类上添加注解或配置,与Spring的Bean管理相结合。 5. 使用Hibernate配置hibernate.cfg.xml,设置数据库连接和实体类映射。 通过这个...

    hibernate_-annotations_中文帮助文档api完整版

    - **过滤器**:使用`@Filter`注解配置动态过滤条件。 - **查询**:使用`@NamedNativeQuery`等注解预定义查询。 #### 六、通过XML覆写元数据 - **原则**: - **全局级别的元数据**:在`persistence.xml`中配置。 ...

    SSH2 Struts2 + Hibernate + Spring 整合及标注的使用

    在`web.xml`中,我们需要配置Struts2的FilterDispatcher过滤器,它是Struts2处理请求的主要入口点。`struts.xml`是Struts2的主配置文件,定义了Action和结果映射。我们还可以通过`&lt;include&gt;`标签引入其他配置文件,...

    hibernate annotation 中文文档

    - **2.2.1.2 乐观锁定版本控制**:使用 `@Version` 注解来实现乐观锁机制,确保数据的一致性和完整性。 - **2.2.2 映射简单属性** - **2.2.2.1 声明基本的属性映射**:使用 `@Column` 注解来指定如何将实体Bean的...

    hibernate annotation帮助文档

    - **过滤器**:使用 `@Filter` 和 `@Filters` 注解来定义条件过滤器。 - **查询**:使用 `@NamedQuery` 和 `@NamedNativeQuery` 注解来定义命名查询。 #### 3. 通过 XML 覆写元数据 - **原则**:Hibernate 允许...

    hibernate_Annotations

    - **过滤器注解**:如`@Filter`。 - **自定义查询注解**:如`@SQL`。 #### 五、元数据覆盖 在某些情况下,可能需要覆盖通过注解定义的元数据。Hibernate提供了以下几种覆盖元数据的方式: - **全局级别的元数据**...

    J2EE考试复习试题2.pdf

    - **核心**: Struts2以**过滤器**作为其核心组件,这意味着所有的HTTP请求都必须经过这个过滤器。 - **机制**: Struts2采用了**拦截器**机制来处理用户的请求,这使得它可以更灵活地管理HTTP请求和响应过程。 3. ...

    hibernate中文帮助文档

    4. Hibernate验证器:Hibernate提供了内置的验证机制,允许开发者通过注解在领域模型上定义约束,以确保数据的完整性和一致性。验证可以在数据库schema级别、事件驱动的验证以及程序级别进行。 5. Hibernate与...

    整合struts2和hibernate框架的网上购物

    4. **实体类和映射**:编写Java实体类,每个类代表数据库中的一个表,并使用Hibernate的注解(如`@Entity`, `@Table`, `@Id`, `@GeneratedValue`等)进行标注,或者创建对应的XML映射文件。 5. **SessionFactory和...

    J2EE考试复习试题_struts2_spring_hibernate.doc

    - **实体类映射**:使用Hibernate的标注(annotations)进行映射时,主键用`@Id`标注,普通属性用`@Column`标注,对应的列则使用`name`属性指定。 - **Hibernate基本操作**:在Hibernate会话接口中,`delete`方法...

    java学习struts_hibernate

    结合Struts和Hibernate,我们可以创建一个强大的Java Web应用框架,其中Struts处理用户请求和视图展示,而Hibernate负责数据的持久化。这种组合允许开发者更专注于业务逻辑,而不是底层的实现细节。 在提供的文件...

    框架面试笔试问答题.docx

    - **@RestController**:结合@Controller和@ResponseBody,用于返回JSON或XML格式的数据。 - **@RequestMapping**:用于映射HTTP请求到特定的方法。 - **@GetMapping/@PostMapping**:分别用于映射GET和POST请求。 -...

    Java面试框架高频问题2019

    2. **注解方式**:使用如`@Component`, `@Service`, `@Repository`等注解标注类,通过`@Autowired`进行依赖注入。 3. **Java配置**:通过`@Configuration`和`@Bean`注解来配置bean。 **问题四:简单的说一下Spring...

    SSH全注解环境搭建

    - 配置OpenSessionInView过滤器以实现懒加载: ```xml &lt;filter-name&gt;openSessionInView&lt;/filter-name&gt; &lt;filter-class&gt;org.springframework.orm.hibernate5.support.OpenSessionInViewFilter&lt;/filter-class&gt; ...

    Spring面试题(2022最新版)-重点

    - **基于 Java 的 Spring 注解配置**:使用注解而不是 XML 文件来定义 Bean 和配置依赖关系。 - **注解示例**: - **`@Component`**:表示这是一个 Spring 管理的 Bean。 - **`@Service`**:用于标注业务逻辑层的 ...

    黄淮学院J2EE考试复习试题

    Struts2以**过滤器**(Filter)为核心,采用**拦截器**(Interceptor)机制来处理用户的请求。这种设计模式提高了代码的复用性,并简化了控制器的开发工作。 3. **构建Struts2应用的基础类库** 构建Struts2应用...

    ssh的开发步奏

    2. **配置web.xml**:在`web.xml`文件中,你需要修改或添加Struts的相关配置,例如移除旧的`&lt;init-param&gt;`配置,并添加字符过滤器`&lt;filter&gt;`和`&lt;filter-mapping&gt;`,用于处理请求和响应的字符编码。 3. **创建过滤器...

    ssh(structs,spring,hibernate)框架中的上传下载

     您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer等工具或手工的方式,编写Hibernate的领域对象和映射文件。其中对应T_FILE表的领域对象Tfile.java为:  代码 1 领域对象Tfile 1. ...

    J2EE复习资料

    2. Struts 2的核心是过滤器,其利用拦截器机制处理用户请求。 3. 构建Struts 2应用所需的几个基本类库包括:struts2-core、xwork、freemarker、ognl以及commons-logging。 4. Struts 2的控制器类是一个普通的Plain ...

Global site tag (gtag.js) - Google Analytics