您现在的位置是:首页 >

hibernate多对多 在JSE环境使用Hibernate EntityManger

火烧 2022-07-02 23:17:43 1064
在JSE环境使用Hi er ate E tityMa ger   JBo 的EJB 实现中 就使用Hi er ate E tityMa ager 和A otatio 作为数据持久化机制 本文不准备讨论

在JSE环境使用Hibernate EntityManger  

  JBoss的EJB 实现中 就使用Hibernate EntityManager 和Annotations 作为数据持久化机制 本文不准备讨论如何在JBoss中使用Hibernate EntityManager 我们在本文中看看如何在JSE环境中使用EntityManger 这样当你的项目需要扩展到JEE容器中时 同样的EntityManger升级是很简单的 OK 下面我们看看如何在JSE环境中应用EntityManager吧:环境配置:JDK : v or 更新Hibernate core : v or 更新(要包涵Hibernate Core所需要的Jar库)Hibernate Annotation: v beta Hibernate EntityManger: v beta 下面看两个相关的定义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容器中使用 这就是EJB 的持久化实现机制 下面我通过一个来自EntityManger test suit中的修改版的简单示例来演示一些如何在JSE环境中配置和操作持久化实体 下面是一个利用Hibernate Annotation注释的持久化实体:

  /* * Created on * @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 OneToMany;import javax persistence SqlResultSetMapping;@Entity(name = Item )//    @SqlResultSetMapping(name = getItem entities =//    @EntityResult(name = 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 distributors;  public Item() {  }  public Item(String name String desc) {    this name = name;    this descr = desc;  }  @Column(length = )  public String getDescr() {    return descr;  }  public void setDescr(String desc) {    this descr = desc;  }  @Id  @Column(length = )  public String getName() {    return name;  }  public void setName(String name) {    this name = name;  }//  @OneToMany//  public Set getDistributors() {//    return distributors;//  }////  public void setDistributors(Set distributors) {//    this distributors = distributors;//  }////  public void addDistributor(Distributor d) {//    if ( distributors == null ) distributors = new HashSet();//    distributors add( d );//  }}

  下面是测试和配置的代码:

  /* * Created on * @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 hibernate cfg Environment;import hibernate ejb Ejb Configuration;import hibernate ejb HibernatePersistence;public class TestConfig {  private EntityManagerFactory emf = null;  public TestConfig() {    this(null);  }  public TestConfig(String fileName) {    // 利用Ejb Configuration来建立EntityManagerFactory     emf = new Ejb Configuration() addAnnotatedClass(Item class) createEntityManagerFactory();  //( ) 看下面解释    //emf = Persistence createEntityManagerFactory( manager ); // 在JSE环境中不可以使用??? ( ) 看下面解释    System out println( Create EMF::::: );  // 利用HibernatePersistence来建立EntityManagerFactory     //emf = new HibernatePersistence() createEntityManagerFactory(getConfig());  //( ) 看下面解释  }    public  Properties loadProperties() {    Properties props = new Properties();    InputStream stream = Persistence class getResourceAsStream( /hibernate properties );    if ( stream != null ) {      try {        props load( stream );      }      catch (Exception e) {        throw new RuntimeException( could not load hibernate properties );      }      finally {        try {          stream close();        }        catch (IOException ioe) {        }      }    }    props setProperty( Environment HBM DDL_AUTO create drop );    return props;  }  private Map getConfig() {    Map config = loadProperties();    ArrayList classes = new ArrayList ();    classes add(Item class);    config put( HibernatePersistence LOADED_CLASSES classes );        return config;  }    public void testEntityManager() { // 测试持久化数据操作 ( )    Item item = new Item( Mouse Micro$oft mouse );    EntityManager em = emf createEntityManager();    em getTransaction() begin();    em persist( item );    System out println( ntains( item ) );    em getTransaction(mit();    System out println(ntains(item));    em getTransaction() begin();    item = (Item) em createQuery( from Item where descr like M% ) getSingleResult();        System out println(item getDescr() + : + item getName());        item setDescr( Micro$oft wireless mouse );    em getTransaction(mit();        System out println(item getDescr() + : + item getName());    em close();    closeEMF();  }    public void closeEMF() {    emf close();    System out println( EMF is closed );  }  /**   * @param args   */  public static void main(String[] args) {    // TODO Auto generated method stub    new TestConfig() testEntityManager();  }}   上面就是测试代码 可以看到 我们可以用不同的方法来创建 EntityManagerFactory  之所以有这么多方法是为了在不同的环境中使用的 ( ): 利用Ejb Configuration来建立EntityManagerFactory 她会在工程目录下寻找hibernate properties 配置文件(hibernate cfg xml好像不可以 大家可以试试看) 然后根据配置信息来创建EntityManagerFactory 配置文件如下:

hibernate多对多 在JSE环境使用Hibernate EntityManger
lishixinzhi/Article/program/Java/ky/201311/28309  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码