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

最新文章

  1. iOS开发之三个Button实现图片无限轮播(参考手机淘宝,Swift版)
  2. EnumHelper.cs枚举助手(枚举描述信息多语言支持)C#
  3. 自定义一个叫 ReadOnlyXmlMembershipProvider 的 MembershipProvider,用 XML 作为用户储藏室
  4. linux 安装软件,卸载软件 等的几种方式
  5. Objc基础学习记录--UIViewController
  6. iOS多线程的初步研究(八)-- dispatch队列
  7. oracle timestamp的转换
  8. 23设计模式(3):Abstract Factory模式
  9. js 仿 asp中的 asc 和 chr 函数的代码
  10. python websocket学习使用
  11. eclipse导出jar(含依赖)三步走
  12. 亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案。
  13. Linux 系统应用编程——进程基础
  14. 【JVM虚拟机】(7)---深入理解Class中-属性集合
  15. python学习第25天
  16. yii2 Gridview网格小部件
  17. hive执行报错:Both left and right aliases encountered in JOIN &#39;s1&#39;
  18. C# winform 去掉button的边框颜色
  19. json和gson的区别
  20. springer论文模板参考文献的顺序问题

热门文章

  1. 异常-面试题之final,finally和finalize的区别,如果在finally之前有return
  2. 08 Json结构化Datetime时间以及保留中文
  3. SAP模块一句话入门(专业术语的理解)
  4. Spring Boot【快速入门】简单案例
  5. Hyperledger Fabric(4)链码ChainCode
  6. Linux分布式消息队列RocketMQ部署与监控--双Master
  7. oracle创建表前校验是否存在
  8. Ubuntu中用sudo apt-get install makeinfo时,出错:Unable to locate package
  9. asyncio动态添加任务
  10. 会了docker你又多了一个谈资(上)