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
知识只有共享才能传播,才能推崇出新的知识,才能学到更多,这里写的每一篇文字/博客,基本都是从网上查询了一下资料然后记录下来,也有些是原滋原味搬了过来,也有时加了一些自己的想法