hibernate entitymanager的理解

hibernate EntityManager是围绕提供JPA编程接口的Hibernate Core的一个包装,支持JPA实体实例的生命周期,并允许你用标准的JavaPersistence查询语言编写查询。

1、基本JPA配置(EntityManagerFactory--EMF配置)

persistence.xml,该文件必须放在被部署的持久化单元的META-INF目录下,由于我这里建的是Java project,所以我把META-INF目录放在bin目录下

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
   version="1.0">  

   <persistence-unit name="helloworld">  

        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <!--
        <class>hello.Message</class>
         -->
        <properties>
            <property name="hibernate.archive.autodetection" value="class,hbm"/>  

            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.url" value="jdbc:MySQL://localhost:3306/myhibernate"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <property name="hibernate.c3p0.min_size" value="5"/>
            <property name="hibernate.c3p0.max_size" value="20"/>
            <property name="hibernate.c3p0.timeout" value="300"/>
            <property name="hibernate.c3p0.max_statements" value="50"/>
            <property name="hibernate.c3p0.idle_test_period" value="3000"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.connection.password" value=""/>
            <property name="myeclipse.connection.profile" value="mysql"/>
        </properties>
   </persistence-unit>
</persistence>

实体类Message.java

    package hello;  

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;  

    @Entity
    @Table(name = "Message")
    public class Message {  

        @Id @GeneratedValue
        @Column(name = "ID")
        private Long id;  

        @Column(name = "MESSAGE_TEXT")
        private String text;  

        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "NEXT_MESSAGE_ID")
        private Message nextMessage;  

        public Long getId() {
            return id;
        }  

        public void setId(Long id) {
            this.id = id;
        }  

        public String getText() {
            return text;
        }  

        public void setText(String text) {
            this.text = text;
        }  

        public Message getNextMessage() {
            return nextMessage;
        }  

        public void setNextMessage(Message nextMessage) {
            this.nextMessage = nextMessage;
        }
    }  

测试类HelloWorld.java

    package hello;  

    import java.util.Iterator;
    import java.util.List;  

    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.Persistence;  

    public class HelloWorld {  

        @SuppressWarnings("unchecked")
        public static void main(String[] args) {  

            EntityManagerFactory emf = Persistence
                    .createEntityManagerFactory("helloworld");  

            /*----------1------*/
            EntityManager em = emf.createEntityManager();
            EntityTransaction tx = em.getTransaction();
            tx.begin();  

            Message message = new Message();
            message.setText("hello world");
            em.persist(message);  

            tx.commit();
            em.close();
            /*----------2------*/
            EntityManager newEm = emf.createEntityManager();
            EntityTransaction newTx = newEm.getTransaction();
            newTx.begin();  

            List messages = newEm.createQuery("select m from Message m order by m.text asc")
                    .getResultList();
            System.out.println("messages.size() = " + messages.size());  

            for (Iterator iter = messages.iterator(); iter.hasNext();) {
                Message loadedMsg = (Message) iter.next();
                System.out.println(loadedMsg.getText());
            }  

            newTx.commit();
            newEm.close();  

            emf.close();
        }  

    }  

运行结果

messages.size() = 1
hello world

说明:

javax.persistence.Persistence   给EntityManagerFactory的创建提供一种静态方法的启动类

javax.persistence.EntityManagerFactory 相当于hibernate的SessionFactory

javax.persistence.EntityManager 相当与hibernate的Session

javax.persistence.Query 相当与hibernate的Query,跟hibernate使用hql一样,同样可以使用对象化的查询语言

javax.persistence.EntityTransaction 相当于hibernate的Transaction

时间: 2024-10-10 18:21:40

hibernate entitymanager的理解的相关文章

J2EE框架(Struts&amp;Hibernate&amp;Spring)的理解

SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求.在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发.(View:沿用JSP,HTTP,Form,Tag,Resourse :Controller:ActionServlet,struts-config.xml,Action)Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作

快学Hibernate

1.1持久化,DAO与ORM 介绍持久化,DAO与ORM三个概念,以及它们之间的关系. 1.1.1 持久化 数据在计算机中有两种状态: 瞬时状态:保存在内存的程序数据,程序退出后,数据就消失了,称为瞬时状态 持久状态:保存在磁盘上的程序数据,程序退出后依然存在,称为程序数据的持久状态.持久化的数据保存在各种文件中,这些文件有不同的后缀,表示不同的类型,这些不同后缀的文件,需要不同的软件读取它. 持久化:将程序数据在瞬时状态和持久状态之间相互转换的机制 图一:持久化 现在的项目大多使用三层构架,即

[Java面试八]Hibernate总结以及在面试中的一些问题.

1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. ②.Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM 实现.他很大程度的简化DAO层的编码工作 ③.hibernate 的性能非常好,因为它是个轻量级框架.映射的灵活性很出色.它支持各种关系数据库,从一对一到多对多的各种复杂关系. 开发流程 2.什么是延迟加载? 延迟加载机制是为了避免一

学习hibernate出现错误--之二(方言)

最近在学习hibernate,其中关于错误的问题真是一头大,各种各样的奇葩错误层出不穷,简直是受不了了. 用hibernate操作数据库,在使用hibernate进行把持久化类自动生成相关数据库表的时候,出现了一些问题. 其中有上篇错误<hibernate学习错误--之一>,在上篇错误解决完成后,进行测试时通过了,没有报错,但是却没有生成表,控制台窗口显示一些找不到相关table的警告,找了半天也不知道错误出现再哪儿,查看配置文件感觉也没问题,配置文件上的一些基本信息,有些是原封不动的从以前一

hibernate框架总结

hibernate的pom.xml专门用于存放各种jar包下面是简单的几种 <dependencies>     <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-core</artifactId>           <version>4.2.21.Final</version> 

JavaEE Hibernate初级概念

1.  Hibernate 是连接Java应用程序和关系数据库的中间件: 对JDBC API进行了封装.负责Java对象的持久化: 在三层软件架构中它位于持久层(数据访问层),封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑: 它是一种ORM映射工具,能够建立面向对象的域模型和关系数据模型之间的映射. 是轻量级JavaEE应用的持久层解决方案. 2.  Hibernate框架的作用: Hibernate主要用来实现Java对象和数据的表之间的映射,除此之外还提供数据查询和获取数据的方法

初识hibernate

//针对myEclipse2014版本 怎样新建一个工程实现这些东西的导入. 打开myeclipse. 2.点击右上角的open perspective 找到这个 MyEclipse Database Explorer.点击ok. 3.右键新建数据库驱动器 4.新建这样一个用以链接的数据库: 5.然后完成第三部的那个创建目录: 6. 选择要展示的视图, 1)展示所有视图 2)展示默认视图 3)展示选中视图 3)a.当前这个 链接里面可以对应到的数据库 b.下图为对应 c.选择我们新建立的数据库:

Hibernate Annotations 注解

Hibernate Annotations 注解 对于org.hibernate.annotations与org.hibernate.persistence,它的注释比如Columns,可是不知道怎么使用,但是hibernate中也封装了javax.persistence,而且数据库映射注释主要还是使用javax.persistence,即如下注释元素Column,使用规则如下.  分类: Java(66)  [java] view plain copy @Entity 声明当前是一个持久化类

Hibernate学习笔记之关联关系

??关联关系是面向对象分析.面向对象设计最重要的知识,Hibernate完全可以理解这种关联关系,如果映射得当,Hibernate的关联映射将可以大大简化持久层数据的访问.关联关系大致有如下两类: 单向关系:只需单向访问关联端. 双向关系:关联的两端可以互相访问 注:双向关系没有N-1,因为双向关系1-N和N-1是完全相同的. 注意:无论单向关系,还是双向关系,是针对面向对象中的类的调用,与底层数据库关系有所差异,不要搞混了. 专业名词通俗解释: 持久化操作:将数据CRUD(增加(Create)