且行且珍惜

java road

常用链接

统计

最新评论

hibernate3 annotation学习

    对于采用hibernate方式实现数据持久化映射的方式,过去,Hibernate 依靠外部的XML文件来配置持久化对象,数据库映射文件定义在一组XML映射文件里并且在程序开始的时候被装载。最近的Hibernate版本里,一个新的建立在Java 5 注解之上更为优雅的方法出现了.利用新的Hibernate Annonations 库,你可以发布一次如你以前的映射文件所定义的信息。
    为 了使用Hibernate Annotations,你需要最新的Hibernate 3.2 ,当然还有Java 5 你可以在Hibernate web site 这个网站下载Hibernate 3.2和Hibernate Annotations库.除了标准的Hibernate 库文件和必须的依赖库之外,还需要下载 Hibernate Annotations库和Java 持久化API ---ejb3-persstence.jar文件。
    在hibernate配置文件中声明采用Hibernate Annotations方式配置的hibernate sessionFactory,具体配置如下:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
  <property name="configLocations">
   <list>
    <value>classpath*:conf/hibernate.cfg.xml</value>
    <!-- 在此声明配置文件里声明持久化类,如hibernate.cfg.xml文件内容如下
 <hibernate-configuration>
 <session-factory>
  <mapping class="com.zhjy.gea.module.assessment.appraisal.domain.Appraisal" />
    <!-- 声明的持久化类-->  
 </session-factory>
</hibernate-configuration>

 -->
    </list>
  </property>
  <property name="mappingDirectoryLocations">
   <list>
   ×××××××
   </list>
  </property>
   <property name="lobHandler" ref="lobHandler" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    <prop key="hibernate.cache.use_query_cache">true</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">false</prop>
    <prop key="hibernate.max_fetch_depth">2</prop>
    <prop key="hibernate.jdbc.fetch_size">50</prop>
    <prop key="hibernate.jdbc.batch_size">50</prop>
    <prop key="hibernate.use_outer_join">true</prop>
   </props>
   <!-- props>
    <prop key="hibernate.dialect">org.hibernate.dialect.OscarDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
   </props -->
  </property>
 </bean>
在此声明了一个基于Annotations 的Hibernate Session Factory。
如果你集成spring,你也可以采用
<bean id="sessionFactory"
         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>
        <prop key="hibernate.hbm2ddl.auto">create</prop>
        ...
      </props>
    </property>
    <property name="annotatedClasses">
      <list>
        <value>com.onjava.modelplanes.domain.PlaneType</value>
        <value>com.onjava.modelplanes.domain.ModelPlane</value>
        ...
      </list>
    </property>
</bean>
方式来声明sessionFactory类。

映射关系:Onetomany


实体类对应表名的注解
 例:
  

@SuppressWarnings("serial")
@Entity
@Table(name = "GEA_APPRAISAL")//这里对应数据库中的表名
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)//采用缓存设置
public class Appraisal extends BaseAssessment {    
    @OneToMany(mappedBy="appraisal",cascade ={CascadeType.ALL},fetch=FetchType.LAZY)//mappedBy="appraisal"
//这个appraisal对应的是many一端即Buy实体类里面的one属性,即AppraisalEvent中定义的ManyToOne中One对应的//实体类.
    @OrderBy("ranking")//many方按ranking排序
    //@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private List<AppraisalEvent> appraisalEvents = new ArrayList<AppraisalEvent>();

 对应的Many方的配置ManyToOne

@SuppressWarnings("serial")
@Entity
@Table(name = "GEA_APPRAISALEVENT")
public class AppraisalEvent extends BaseAssessment {
    @ManyToOne(cascade ={CascadeType.PERSIST,CascadeType.MERGE})
    @JoinColumn(name = "Id")   //这个Id是one一边对应数据库中的主键名
    /** 对应的One方的实体类 */
    private Appraisal appraisal;
在many方的表中自动生成appraisal_id字段与One所指的实体类映射的表的主键关联,实际的数据库表关联语句为
alter table GEA_APPRAISALEVENT
  add constraint FKCC003B712ABC052 foreign key (APPRAISAL_ID)
  references GEA_APPRAISAL (ID);

posted on 2008-08-12 14:32 jws-21 阅读(697) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: