Hibernate @Formula 注解方式

 

1.Formula的作用

  Formula的作用就是用一个查询语句动态的生成一个类的属性

  就是一条select count(*)...构成的虚拟列,而不是存储在数据库里的一个字段。用比较标准的说法就是:有时候,你想让数据库,而非JVM,来替你完成一些计算,也可能想创建某种虚拟列,你可以使用sql片段,而不是将属性映射(物理)列。这种属性是只读的(属性值由公式求得).Formula甚至可以包含sql子查询

 

 

2.Formula的使用

package aa;

import static javax.persistence.GenerationType.IDENTITY;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Formula;

/**
 * 注解必须是在属性上的,如果有任何一个注解在方法上,那么@Formula将失效
 * @author 昆明蜂鸟软件
 * @version 0.1.0 2008-7-15 下午06:09:38
 */
@Entity
@Table(name = "user", catalog = "test")
public class User {
    
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private int id;

    @Formula("(select COUNT(*) from user)")
    private int count;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}

 

 

另在@Formula可以直接使用本模型类中的属性取值

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(generator="paymentableGenerator")
    @GenericGenerator(name="paymentableGenerator",strategy="uuid")
    @Column(name="idStr")
    private String idStr;
    @Column(name="title")
    private String title;
    @Column(name="abstracts")
    private String abstracts;
    @Column(name="content")
    private String content;
    @Column(name="author")
    private String author;
    @Column(name="img_url")
    private String img_url;
    @Column(name="release_date")
    private Date release_date;
    @Column(name="status")
    private String status;
    @Column(name="status_date")
    private Date status_date;
    
    @Formula("(select count(*) from qe_topic qt where qt.object_type = '3' and qt.object_id=idStr )")  
    private int topicCount;//评论数量

 

其中的idStr为当前类中的idStr

 

posted @ 2015-07-22 15:58  243573295  阅读(1178)  评论(0编辑  收藏  举报