选择显示字体大小

在jse环境中使用hibernate entitymanger

大家都知道在ejb3中 使用entitymanger来操作持久化数据,hibernate也实现了与ejb3完全兼容并且功能更强的entitymanger,配合hibernate annotation一起使用 可以说在数据持久化方面与ejb3几乎没有区别了,技术最终汇聚到了一起.可见现在技术发展的趋势.

版权声明:任何获得matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:icess(作者的blog:http://blog.matrix.org.cn/page/icess)
原文:hibernate+entitymanger.html
" target="_new">http://www.matrix.org.cn/resource/article/44/44202_hibernate+entitymanger.html
关键字:hibernate;entitymanager

jbossejb3实现中,就使用hibernate entitymanager 和annotations 作为数据持久化机制,本文不准备讨论如何在jboss中使用hibernate entitymanager 我们在本文中看看如何在jse环境中使用entitymanger, 这样当你的项目需要扩展到jee容器中时,同样的entitymanger升级是很简单的. ok,下面我们看看如何在jse环境中应用entitymanager吧:

环境配置:
jdk : v5.0 or 更新
hibernate core : v3.1.1 or 更新(要包涵hibernate core所需要的jar库)
hibernate annotation: v3.1beta8
hibernate entitymanger: v3.1beta6

下面看两个相关的定义

entitymanagerfactory
entitymanagerfactory 提供 entity manager的实例(instances:所有被配置的实例都连接相同的数据库)利用相同的默认设置.你可以准备几个entitymanagerfactory 来访问不同的数据库.该接口(interface)和hibernate core中的sessionfactory差不多.

entitymanager
entitymanager api 是用来在一个特别的工作单元(particular unit of work)中访问数据库的.她用来创建和删除(create and remove) 持久实体实例的;可以通过实体的主键标识符(primary key identity)来查询(find)实体;或者查询所有实体. 这个接口和hibernate core中的session差不多.
因此,使用hibernate entitymanager 和使用hibernate core 是差不多的,只不过 entitymanger还可以方便的在jee容器中使用,这就是ejb3 的持久化实现机制.
下面我通过一个来自entitymanger test suit中的修改版的简单示例来演示一些如何在jse环境中配置和操作持久化实体.

下面是一个利用hibernate annotation注释的持久化实体:

/*
* created on 2006-2-5
* @author icerain
*/
package test.test;

import java.io.serializable;
import java.util.hashset;
import java.util.set;
import javax.persistence.column;
import javax.persistence.entity;
import javax.persistence.entityresult;
import javax.persistence.fieldresult;
import javax.persistence.id;
import javax.persistence..netomany;
import javax.persistence.sqlresultsetmapping;

@entity(name = "item")
//    @sqlresultsetmapping(name = "getitem", entities =
//    @entityresult(name = "org.hibernate.ejb.test.item", fields = {
//    @fieldresult(name = "name", column = "itemname"),
//    @fieldresult(name = "descr", column = "itemdescription")
//    })
//)
//@cache(region="item", usage=nonstrict_read_write)
public class item implements serializable {

  private string name;
  private string descr;
  //private set<distributor> distributors;

  public item() {
  }

  public item(string name, string desc) {
    this.name = name;
    this.descr = desc;
  }

  @column(length = 200)
  public string getdescr() {
    return descr;
  }

  public void setdescr(string desc) {
    this.descr = desc;
  }

  @id
  @column(length = 30)
  public string getname() {
    return name;
  }

  public void setname(string name) {
    this.name = name;
  }

//  @.netomany
//  public set<distributor> getdistributors() {
//    return distributors;
//  }
//
//  public void setdistributors(set<distributor> distributors) {
//    this.distributors = distributors;
//  }
//
//  public void adddistributor(distributor d) {
//    if ( distributors == null ) distributors = new hashset();
//    distributors.add( d );
//  }
}



下面是测试和配置的代码:
/*
* created on 2006-2-5
* @author icerain
*/
package test.test;

import java.io.ioexception;
import java.io.inputstream;
import java.util.arraylist;
import java.util.map;
import java.util.properties;

import javax.persistence.entitymanager;
import javax.persistence.entitymanagerfactory;
import javax.persistence.persistence;

import org.hibernate.cfg.environment;
import org.hibernate.ejb.ejb3configuration;
import org.hibernate.ejb.hibernatepersistence;


public class testconfig {
  private entitymanagerfactory emf = null;

  public testconfig() {
    this(null);
  }
  public testconfig(string filename) {
    // 利用ejb3configuration来建立entitymanagerfactory
    emf = new ejb3configuration().addannotatedclass(item.class).createentitymanagerfactory();  //(1) 看下面解释
    //emf = persistence.createentitymanagerfactory(&quot;manager1&quot;); // 在jse环境中不可以使用??? (2) 看下面解释
    system.out.println(&quot;create emf:::::&quot;);
  // 利用hibernatepersistence来建立entitymanagerfactory
    //emf = new hibernatepersistence().createentitymanagerfactory(getconfig());  //(3) 看下面解释
  }
  
  public  properties loadproperties() {
    properties props = new properties();
    inputstream stream = persistence.class.getresourceasstream( &quot;/hibernate.properties&quot; );
    if ( stream != null ) {
      try {
        props.load( stream );
      }
      catch (exception e) {
        throw new runtimeexception( &quot;could not load hibernate.properties&quot; );
      }
      finally {
        try {
          stream.close();
        }
        catch (ioexception ioe) {
        }
      }
    }
    props.setproperty( environment.hbm2ddl_auto, &quot;create-drop&quot; );
    return props;
  }

  private map getconfig() {
    map config = loadproperties();
    arraylist<class> classes = new arraylist<class>();

    classes.add(item.class);
    config.put( hibernatepersistence.loaded_classes, classes );
    
    return config;
  }
  
  public void testentitymanager() { // 测试持久化数据操作 (4)

    item item = new item( &quot;mouse1&quot;, &quot;micro$oft mouse&quot; );

    entitymanager em = emf.createentitymanager();
    em.gettransaction().begin();
    em.persist( item );
    system.out.println( em.contains( item ) );
    em.gettransaction().commit();

    system.out.println(em.contains(item));

    em.gettransaction().begin();
    item = (item) em.createquery( &quot;from item where descr like 'm%'&quot; ).getsingleresult();
    
    system.out.println(item.getdescr() + &quot;:&quot; + item.getname());
    
    item.setdescr( &quot;micro$oft wireless mouse&quot; );
    em.gettransaction().commit();
    
    system.out.println(item.getdescr() + &quot;:&quot; + item.getname());

    em.close();
    closeemf();

  }
  
  public void closeemf() {
    emf.close();
    system.out.println(&quot;emf is closed..&quot;);
  }

  /**
   * @param args
   */
  public static void main(string&#91;&#93; args) {
    // todo auto-generated method stub
    new testconfig().testentitymanager();
  }

}


上面就是测试代码,可以看到,我们可以用不同的方法来创建 entitymanagerfactory&nbsp;, 之所以有这么多方法是为了在不同的环境中使用的.

(1): 利用ejb3configuration来建立entitymanagerfactory ,她会在工程目录下寻找hibernate.properties 配置文件(hibernate.cfg.xml好像不可以,大家可以试试看),然后根据配置信息来创建entitymanagerfactory .
配置文件如下:
#created by jinto - www.guh-software.de
#sun feb 05 22:38:30 cst 2006
hibernate.cache.provider_class=org.hibernate.cache.hashtablecacheprovider
hibernate.cache.region_prefix=hibernate.test
hibernate.connection.driver_class=com.mysql.jdbc.driver
hibernate.connection.password=329
hibernate.connection.pool_size=1
hibernate.connection.url=jdbc\:mysql\://localhost/test3
hibernate.connection.username=root
hibernate.default_batch_fetch_size=8
hibernate.dialect=org.hibernate.dialect.mysqldialect
hibernate.hbm2ddl.auto=update
hibernate.jdbc.batch_versioned_data=true
hibernate.jdbc.use_streams_for_binary=true
hibernate.max_fetch_depth=1
hibernate.order_updates=true
hibernate.proxool.pool_alias=pool1
hibernate.query.substitutions=true 1, false 0, yes 'y', no 'n'
javax.persistence.provider=org.hibernate.ejb.hibernatepersistence


(2)文档上说利用persistence可以创建的 但是我利用不同方法试了几下,都不可以,大家可以试试 如果你知道如何用 要记得告诉我哦 :).

(3) 利用hibernatepersistence来建立entitymanagerfactory, 她可以利用一个properties 来创建, 该properties 你可以随便创建 只有包含必要的配置信息就可以了, 上面的代码中用了一个map .

(4): &nbsp;调用testentitymanager()&nbsp;方法 测试持久化数据操作 .

ok, 到此一个简单的在jse环境中使用entitymanger的介绍就结束了.

后记:
jse环境中使用 hibernate core 和entitymanager 是差不多的, 有没有必要使用entitymanager,个人认为 使用entitymanager就是为了应付将来项目扩展的jee容器中使用,这样持久化部分实现很容易在jee容器中实现,只要利用jndi得到entitymanagerfactory就可以了,别的就没有什么改动了.如果你的项目不在jee中使用的话, 没有必要用entitymanager.

个人观点,仅供参考! :)
欢迎发表你的观点.


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons