引用hibernate annotations技术文档中的解释可以很好的说明@Formula的作用,但它确实没有说清楚怎么使用,并且给出的示例是用不了的,这让我浪费了好 几个钟头的时间!
Formula的作用就是说白了就是用一个查询语句动态的生成一个类的属性,比如java eye登陆之后 收件箱显示有几封未读邮件的数字,就是一条select count(*)...构成的虚拟列,而不是存储在数据库里的一个字段。用比较标准的说法就是:有时候,你想让数据库,而非JVM,来替你完成一些计算, 也可能想创建某种虚拟列,你可以使用sql片段,而不是将属性映射(物理)列。这种属性是只读的(属性值由公式求得).Formula甚至可以包含sql 子查询
Formula真的这么强大吗?确实,它很好很强大,节省了不少代码!
2.使用Formula键字: hibernate formula
阅读对象:
1.已经在使用Hibernate JPA完成持久化映射的朋友。
2.在网上搜索Formula并通通搜到转载oralce一篇技术文章或hibernate annotations技术文档的朋友。
3.发现@Formula不能使用并想Ctrl+Delete hibernate jar包,然后砸烂显示器的朋友。
文章内容
本文将说明如何使用@Formula,并且说明在哪几种情况下@Formula会失灵。
1.Formula的作用
- packageaa;
-
-
importstaticjavax.persistence.GenerationType.IDENTITY;
-
-
importjavax.persistence.Entity;
-
importjavax.persistence.GeneratedValue;
-
importjavax.persistence.Id;
-
importjavax.persistence.Table;
-
-
importorg.hibernate.annotations.Formula;
-
-
-
@Entity
-
@Table(name="user",catalog="test")
-
publicclassUser{
-
- @Id
-
@GeneratedValue(strategy=IDENTITY)
-
privateintid;
-
-
@Formula("(selectCOUNT(*)fromuser)")
-
privateintcount;
-
-
publicintgetId(){
-
returnid;
- }
-
-
publicvoidsetId(intid){
-
this.id=id;
- }
-
-
publicintgetCount(){
-
returncount;
- }
-
-
publicvoidsetCount(intcount){
-
this.count=count;
- }
- }
数据库表:
- CREATETABLE`test`.`user`(
- `id`int(10)unsignedNOTNULLauto_increment,
-
PRIMARYKEYUSINGBTREE(`id`)
- )ENGINE=InnoDBAUTO_INCREMENT=3DEFAULTCHARSET=utf8;
细节 1.使用@Formula 你的注解必须是在属性上,如果有一个注解在方法上,那么@Formula将失效。这个我是做过实验的,比如把以上的java文件改为:
- packageaa;
-
-
importstaticjavax.persistence.GenerationType.IDENTITY;
-
-
importjavax.persistence.Entity;
-
importjavax.persistence.GeneratedValue;
-
importjavax.persistence.Id;
-
importjavax.persistence.Table;
-
-
importorg.hibernate.annotations.Formula;
-
-
-
@Entity
-
@Table(name="user",catalog="test")
-
publicclassUser{
-
-
privateintid;
-
-
@Formula("(selectCOUNT(*)fromuser)")
-
privateintcount;
-
- @Id
-
@GeneratedValue(strategy=IDENTITY)
-
publicintgetId(){
-
returnid;
- }
-
-
publicvoidsetId(intid){
-
this.id=id;
- }
-
-
publicintgetCount(){
-
returncount;
- }
-
-
publicvoidsetCount(intcount){
-
this.count=count;
- }
- }
这样@Formula就不可以运行!!!我前边就是被Hibernate官方的文 档给搞晕了。
细节 2.既然@Formula 是一个虚拟列,那么数据库中不需要建这一列,同样可以,如果有个列存在,hibernate也会将 其忽略。以上示例中的user就没有count列。
细节 3.sql语句必须写在()中,这个以前也有人说过。
细节 4.如果有where子查询,那么表需要用别名,比如 select COUNT(*) from user where id=1 是错的
而select COUNT(*) from user u where u.id=1是正确的
细节 5.只要是你在数据库的sql控制台执行过的语句,并且使用了表别名,那么@Formula都应该是支持的。
确实@Formula是一个很常用且好用的东西!
分享到:
相关推荐
描述中的"hibernate orm框架api中文文档,学习资料,框架详解资料"进一步明确了这些资源的性质,即它们是关于Hibernate ORM框架的API文档、学习教程以及框架的详细解释,都是中文版本,方便中文读者学习。...
**Hibernate基础全攻略** Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以专注于业务逻辑而不是繁琐的SQL代码。本篇攻略将深入探讨Hibernate的基础知识,帮助初学者...
2.4. Hibernate独有的注解扩展:除了标准的EJB3注解,Hibernate还提供了一些自定义注解,如`@GeneratedValue`用于设置主键生成策略,`@Formula`用于在属性中使用SQL表达式,`@Cache`用于配置缓存,`@Filter`用于动态...
在Java世界中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨Hibernate的核心概念,结合提供的中文文档,以及hibernate-annotation-3.4.0GA和hibernate-distribution-...
注意:在Hibernate3中,第二个要求并非是Hibernate强制必须的。但最好这样做。 你不能使用一个IdentifierGenerator产生组合关键字。一个应用程序必须分配它自己的标识符。 使用<composite-id> 标签(并且内嵌元素...
在Java开发中,Hibernate提供了一种抽象层,允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL语句,极大地提高了开发效率。 《Hibernate官方中文参考手册》是学习Hibernate的基础,它详细介绍了...
Hibernate开发者指南,包括HIBERNATE - Relational Persistence for Idiomatic Java.pdf,Hibernate Getting Started Guide.pdf,Hibernate Developer Guide.pdf,Hibernate 中文API文档.chm,Hibernate3.2.chm。
《Hibernate参考指南中文版》与《Hibernate中文手册》是学习Java领域中ORM(对象关系映射)框架Hibernate的重要参考资料。Hibernate作为一个开源的、强大的持久化框架,极大地简化了数据库操作,使得开发人员能够以...
这个压缩包包含的资源是Hibernate的中英文API文档,以及一些指南,旨在帮助开发者更好地理解和使用Hibernate。 1. **Hibernate API文档**: Hibernate的API文档是理解其工作原理的关键。`Hibernate3.2.chm`可能是...
Hibernate框架中文帮助文档 CHM格式
hibernate hibernate3 hibernate3中文 hibernateAPI
在Hibernate 5.0中,这个框架进一步提升了性能和易用性,引入了许多新的特性和改进。 文档首先会介绍Hibernate的基本概念,包括实体(Entity)、持久化(Persistence)、对象关系映射(ORM)以及Session和...
Hibernate中文手册API,chm格式
通过《Hibernate4.1.11中文手册》,开发者不仅可以深入理解Hibernate的工作原理,还能掌握其在实际项目中的应用技巧,从而提高开发效率和软件质量。这份资源对于任何使用Java进行数据库开发的人来说,都是一份宝贵的...
标题“hibernate官方入门教程 (转载)”表明这是一份关于Hibernate框架的基础教学资源,可能是从官方文档或者其他可靠来源整理而来的,适合初学者了解和学习Hibernate。 描述中提到的“NULL”意味着没有具体的描述...
Hibernate 4.1是Java开发中的一个关键框架,主要用于对象关系映射(ORM),它使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层的SQL语法。这份中文官方文档是学习和理解Hibernate 4.1功能和用法的重要...
此版本标志着Hibernate框架中的一个特定阶段,特别是关于如何利用注解(Annotations)来简化Java对象与数据库表之间的映射。 #### Hibernate Annotations 简介 Hibernate 是一款非常流行的 Java 持久化框架,它通过...
在 Hibernate 3.3 版本中,该框架引入了许多增强特性和优化,使得数据操作更加高效便捷。这款“hibernate3.3 api中文”文档为学习 Hibernate 提供了宝贵的中文资源,帮助开发者理解和应用 Hibernate 的各种功能。 ...