`

初次步入Hibernate Annotation

阅读更多
Hibernate Annotation早已经出现...
JPA早已被炒得爆了锅...但我才刚刚学习...

最近在重构网站的时候,类的移动免不了.虽然IDE帮了很多的忙,但在XML文件中的类路径不会变化..每次移了类都得再一个一个地找XML文件的类.
使用注解方式也得去修改XML文件,但相对于完全使用XML文件,减少了修改类之间有引用时的修改,只需要修改下总的配置文件就OK了.何乐而不会.

参考文章http://www.blogjava.net/bolo/archive/2008/09/19/229823.html

首先下载必要的包..hibernate hibernate-annotations
            ejb3-persistence  hibernate-commons-annotations
下载的时候得注意包的兼容性.在hibernate的官网上已经说明了下载注解包时需下载哪个core包..
不然就可能出现类似
tried to access field org.hibernate.cfg.Configuration. xmlHelper from class org.hibernate.cfg.AnnotationConfiguration

的错误

还要注意hibernate新版本中的日志记录改为使用slf4j,得把下载包中的lib\required下的jar文件也放到工程中.
不然会出现类似
Failed to load class "org.slf4j.impl.StaticLoggerBinder"
错误
别的有使用的包也要重新导入新的版本.比如ehcache,得使用ehcache-1.2.3.jar包..
过去使用的低版本得换掉
不然会出现
java.lang.IllegalAccessError: tried to access method net.sf.ehcache.CacheManager.()V from class org.hibernate.cache.EhCacheProvider 


准备工作完成之后,就可以写代码了..
一个POJO.
@Entity   
@Table(name = "teacher_info")//实体类和数据库表名不一致时,才用这个   
public class UserMember implements java.io.Serializable {   
   
    @Id   
    @GeneratedValue(generator = "system-uuid")   
    @GenericGenerator(name = "system-uuid", strategy = "uuid")   
    private String id;   
   
    @Column(updatable = false, nullable = false, length = 20)   
    private String logonName; 
 


在导入Entity时,会有两个,一个是persistence包下还有一个是hibernate annotation下,得导入persistence下的.
http://www.hibernate.org/329.html
引用
I use @org.hibernate.annotations.Entity and get an Unknown entity exception
Always import @javax.persistence.Entity

@org.hibernate.annotations.Entity completes @javax.persistence.Entity but is not a replacement


写完后.第三步就是在hibernate.config下配置.
<mapping class="com.james.business.modle.domain.Event" /> 

不再是过去的
<mapping resource="com/james/business/modle/domain/Event.hbm.xml" />


还有就是
引用
用org.hibernate.cfg.AnnotationConfiguration替代以前的org.hibernate.cfg.Configuration,来初始化org.hibernate.SessionFactory。

初始化方法,sessionFactory = new AnnotationConfiguration().configure() .buildSessionFactory();

如果这时使用sessionFactory = new Configuration().configure() .buildSessionFactory(),会报异常:An AnnotationConfiguration instance is required to use 。


如果是用的spring,并且想映射文件与注解方式一并使用
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.[color=red]LocalSessionFactoryBean[/color]">
<property name="dataSource" ref="dataSource"/>
<property name="configLocations">
<list>
<value>classpath*:/config/hibernate.cfg.xml</value>
</list>
</property>
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>


OK了.annonation的基本上就这些..当然还有关系间的映射之类,但慢慢去了解使用.

在hibernate升级后,得注意下对于select count语句的返回值问题..
过去hibernate3.2都是返回Integer
但现在3.3是返回Long...我在升级包后,重新junit的时候,就出现了classcastexception
引用
这个变化主要是为了兼容JPA,可以在hibernate.org的最新文档中找到说明。

Hibernate Team也提供了一个与原来兼容的解决方案:

  Configuration classicCfg = new Configuration();
  classicCfg.addSqlFunction( "count", new ClassicCountFunction());
  classicCfg.addSqlFunction( "avg", new ClassicAvgFunction());
  classicCfg.addSqlFunction( "sum", new ClassicSumFunction());
  SessionFactory classicSf = classicCfg.buildSessionFactory();


也可以使用这种方法
 @Override
  public int countAllSubject() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Number number=((Number) session.createQuery(
        "select count(*) from Post where idParent=0").iterate().next());
    return number.intValue();
        
  }

引用
因为无论是Long还是Integer,还是BigInteger,它们都是Number的子类,所以用Number去cast这个结果是肯定不会错的,然后,最好定义在Number里面这些方法可以统一的返回需要的类型;

byte byteValue()
          以 byte 形式返回指定的数值。
abstract  double doubleValue()
          以 double 形式返回指定的数值。
abstract  float floatValue()
          以 float 形式返回指定的数值。
abstract  int intValue()
          以 int 形式返回指定的数值。
abstract  long longValue()
          以 long 形式返回指定的数值。
short shortValue()
          以 short 形式返回指定的数值。



以上就是在使用annotation后遇到的一些问题.


1
0
分享到:
评论

相关推荐

    Hibernate Annotation jar

    这里面包涵了需要用Hibernate Annotation时,所需要的所有jar包! 现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用...

    hibernate annotation中文文档

    hibernate annotation中文文档

    hibernate annotation hibernate3

    《Hibernate注解与Hibernate3深度解析》 在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行...

    hibernate annotation 中文文档

    《Hibernate Annotation 中文文档》是Java开发者们的重要参考资料,它详细介绍了如何在Hibernate框架中使用注解进行对象关系映射(ORM)。Hibernate是一款强大的开源Java持久化框架,它简化了数据库与Java对象之间的...

    最全的Hibernate Annotation API文档

    在Hibernate中,注解(Annotation)是一种声明式的方法,用于配置实体类、属性以及它们与数据库表之间的映射关系。本文将深入探讨“最全的Hibernate Annotation API文档”中的关键知识点。 一、实体类(Entity) 在...

    Hibernate Annotation 中文文档

    **Hibernate Annotation 中文文档** 在Java的持久化框架中,Hibernate是一个非常重要的工具,它极大地简化了数据库操作。随着技术的发展,Hibernate Annotation逐渐成为主流,因为它提供了更直观、更简洁的方式来...

    Hibernate Annotation库

    Hibernate Annotation库是Java开发中用于简化对象关系映射(ORM)的一个重要组件,它使得开发者能够在Java类上直接使用注解来定义数据库映射,从而避免了传统的XML配置文件。这三个特定的jar包是Hibernate ORM框架中...

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...

    Hibernate Annotation入门

    **Hibernate Annotation 入门** Hibernate 是一款非常流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。而Hibernate Annotation是Hibernate的一个重要特性,它通过在Java类和字段上...

    Hibernate Annotation

    Hibernate Annotation

    hibernate 注解 annotation 教程

    hibernate 注解 annotation 教程

    Hibernate_annotation3.4_api.CHM

    Hibernate annotation 3.4 api CHM

    sping hibernate Annotation(注释配置) demo(例子)

    总结来说,这个 "Spring Hibernate Annotation demo" 展示了如何在 Spring 框架中使用注解配置来管理依赖,以及如何利用 Hibernate 的注解进行数据持久化。同时,它还涉及到了 Flex 前端与后端的交互。通过学习这个 ...

    hibernate annotation api chm文件

    Hibernate Annotation API是Hibernate ORM的一种扩展,允许开发者使用Java注解(Annotations)来定义对象-关系映射。这种API避免了传统的Hibernate XML配置文件,使得ORM配置更加内聚且易于维护。 2. **核心注解**...

    Hibernate Annotation 笔记 总结 注解

    【标题】:深入理解Hibernate Annotation及其使用 【描述】:本文将全面介绍Hibernate Annotation的使用,包括事务管理和声明式事务处理,以及如何通过注解简化数据库持久化操作。 【标签】:Hibernate, ...

    HibernateAnnotation

    ### HibernateAnnotation 技术概述 在Java开发领域中,Hibernate框架是进行对象关系映射(Object-Relational Mapping,简称ORM)的一种非常流行的工具。它能够帮助开发者将面向对象的模型与关系型数据库进行桥接,...

    Hibernate-Annotation中文教程.pdf

    Hibernate Annotation中文教程 Hibernate 是 Java 数据库持久性的事实标准之一,它非常强大、灵活,而且具备了优异的性能。传统上,Hibernate 的配置依赖于外部 XML 文件,而最近发布的几个 Hibernate 版本中,...

    Hibernate Annotation 唯一外键一对一双向关联

    通过阅读《Hibernate_annotation_1to1_foreignKey》文档或博客,你可以更详细地了解如何配置和使用这种关联,包括示例代码、注意事项以及可能遇到的问题和解决方案。理解并熟练运用这些知识,能帮助你在使用...

Global site tag (gtag.js) - Google Analytics