EntityManager 实例化方法

Configure the EntityManager via a persistence.xml file

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">

  <persistence-unit name="movie-unit">
    <jta-data-source>movieDatabase</jta-data-source>
    <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
    <class>org.superbiz.injection.jpa.Movie</class>

    <properties>
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
    </properties>
  </persistence-unit>
</persistence>

Notice that the Movie entity is listed via a <class> element. This is not required,

but can help when testing or when the Movie class is located in a different jar than the jar containing the persistence.xml file.

persistence.xml 和 Entity在同一个jar包下的话,则不需要标注class元素。

Injection via @PersistenceContext

The EntityManager itself is created by the container using the information in the persistence.xml, so to use it at runtime, we simply need to request it be injected into one of our components. We do this via @PersistenceContext

The @PersistenceContext annotation can be used on any CDI bean, EJB, Servlet, Servlet Listener, Servlet Filter, or JSF ManagedBean. If you don‘t use an EJB you will need to use a UserTransaction begin and commit transactions manually. A transaction is required for any of the create, update or delete methods of the EntityManager to work.

package org.superbiz.injection.jpa;

import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.Query;
import java.util.List;

@Stateful
public class Movies {

    @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED)
    private EntityManager entityManager;

    public void addMovie(Movie movie) throws Exception {
        entityManager.persist(movie);
    }

    public void deleteMovie(Movie movie) throws Exception {
        entityManager.remove(movie);
    }

    public List<Movie> getMovies() throws Exception {
        Query query = entityManager.createQuery("SELECT m from Movie as m");
        return query.getResultList();
    }
}

This particular EntityManager is injected as an EXTENDED persistence context, which simply means that the EntityManager is created when the @Statefulbean is created and destroyed when the @Stateful bean is destroyed. Simply put, the data in the EntityManager is cached for the lifetime of the @Statefulbean.

The use of EXTENDED persistence contexts is only available to @Stateful beans. See the JPA Concepts page for an high level explanation of what a "persistence context" really is and how it is significant to JPA.

时间: 2024-10-12 22:13:57

EntityManager 实例化方法的相关文章

深入理解静态方法和实例化方法的区别

这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用实例化方法需要new了以后才可以使用....我们真的理解了吗? 从实际项目开发说起,这里有开发项目的三种方式: 开发项目中把BLL和DAL分开,在BLL调用DAL的代码. 一.在DAL中使用静态方法,不创建实例直接调用(大概有很多人都使用这种方式

PHP中静态方法和实例化方法的区别

在PHP中类为什么要使用静态方法,有什么好处 不需要实例化?? 可以提高运行效率?? 这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用....我们真的理解了吗? 我特意以"你怎么理解并使用静态方法和实例化方法的?"这样的问题询问了多位程序员,他们

Java系列之:看似简单的问题 静态方法和实例化方法的区别

(2011-12-06 15:28:26) 转载▼ 标签: 杂谈 分类: study 今天看书时一直没真正弄明白静态方法和实例方法的区别,就在网上搜索,找到一篇很好的文章,和大家分享一下: 这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用....我们真的理

静态方法和实例化方法的区别

出处不明.(google了大半天,这篇文章的转载倒是挺多的,不过出处一直没找到,还有些没有标明转载,但发布日期比转载的还晚的忽略不计 = =#) 文章中,提到了不少我们容易混淆的问题,特别是装载.内存方面. 借此机会,再次向大家推荐<程序员的自我修养--链接.装载与库>一书!许多东西是看了那本书才知道的,有助于对静态方法和实例化方法的理解. ---------------------------------------------下面是转载的正文------------------------

类方法,静态方法,实例化方法的区别

学习javascript的同学尤其是一些初级学员很难弄清什么,类方法.静态方法.动态方法.实例化方法.虽然有些都一样,但是叫法不同.本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助. 开始 创建一个类 function User(name, age) { this.name = name; this.age = age; } 创建一个类的静态方法(也叫类方法) User.getClassName = function () { return 'User'; }; 调用静态方法

静态方法的使用2——与实例化方法的区别

1.写法不同 静态方法写法为      public static void add() 实例化方法写法为   public void add2() 2.调用方法不同 静态方法只能直接调用静态的方法和属性 写法为:Lianxi.add()//类名.变量 实例化方法可以调用实例化的方法和属,也可以调用静态的方法和属性(首先要实例化New ) package com.hanqi; public class Lianxi { public static void add() { System.out.

静态方法与实例化方法区别

静态可以认为是缓存,在软件启动的时候,就给静态成员分配了存储空间,在整个软件生命期内存在,直到系统退出才被垃圾回收器回收销毁.对不经常发生变化又使用频繁的东东,比如配置词语,可以使用静态的,减少和数据库的频繁交互.提升系统性能某些比较昂贵的资源,比如数据库连接对象,声明成静态完全没有必要,这是因为即使你声明成静态,连接也不会一直保持打开状态,徒增加系统开销. 在性能方面会有差异,静态方法性能优于实例化方法,就是因为他不用实例化,程序开始运行的时候静态变量.静态方法就被分配了内存,所以你随时可以调

静态方法和实例化方法的区别 -转载

这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用....我们真的理解了吗? 从实际项目开发说起,这里有开发项目的三种方式: 开发项目中把BLL和DAL分开,在BLL调用DAL的代码. 一.在DAL中使用静态方法,不创建实例直接调用(大概有很多人都使用这种方

java静态方法和实例化方法的区别(copy)

[资料来源] http://blog.csdn.net/biaobiaoqi/article/details/6732117 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用 实例化方法需要new了以后才可以使用....我们真的理解了吗? 从实际项目开发说起,这里有开发项目的三种方式: 开发项目中把BLL和DAL分开,在BLL调用DAL的代码. 一.在DAL中使用静态方法,不创建实例直