标签: entitymanager

createEntityManager在org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus中抛出java.lang.NullPointerException.

当我部署我的hibernate应用程序时,我得到了这个堆栈跟踪

java.lang.NullPointerException
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:72) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:114) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149) [hibernate-core-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1197) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:170) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:112) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:107) [hibernate-entitymanager-4.0.0.Beta1.jar:4.0.0.Beta1]
    at com.mycompany.myapp.common.persistence.HibernateUtil.<clinit>(HibernateUtil.java:53) [classes:]
    at com.mycompany.myapp.common.businessobjects.ServerSettings.GetServerSettings(ServerSettings.java:247) [classes:]
    at com.mycompany.myapp.common.servlet.SecurityFilter.init(SecurityFilter.java:55) [classes:]
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:447) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3245) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3836) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
    at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
    at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
Run Code Online (Sandbox Code Playgroud)

它在我的HibernateUtil类中命中NPE,第53行是一条创建EntityManager的行 - 看起来createEntityManager()返回null.代码看起来像

private static EntityManagerFactory entityManagerFactory = null;
private static EntityManager entityManager = null;

static {
    try {

        entityManagerFactory …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa nullpointerexception entitymanager

13
推荐指数
2
解决办法
2万
查看次数

没有名为X的EntityManager的持久性提供程序

我正在使用JPA开发JavaSE应用程序.不幸的是,我null打电话后: Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

您将在下面找到:

  • 我的代码片段,调用EntityManagerFactory并意外返回null
  • 我的persistence.xml档案
  • 我的项目结构

我的代码片段:

public class Main {
    private static final String PERSISTENCE_UNIT_NAME = "MeineJpaPU";
    private static EntityManagerFactory factory;

    public static void main(String[] args) {
        // I get null on this line!!!
       factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

       EntityManager em = factory.createEntityManager();
       // do stuff with entity manager
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    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">
  <persistence-unit name="MeineJpaPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>path.to.package.server.Todo</class>
      <exclude-unlisted-classes>false</exclude-unlisted-classes>
     <properties>       
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>       
            <property name="javax.persistence.jdbc.url" …
Run Code Online (Sandbox Code Playgroud)

java jpa entitymanager persistence.xml java-ee

13
推荐指数
2
解决办法
7万
查看次数

使用flush()方法对每100行10 000个慢速事务进行处理

我有一个示例项目使用spring-bootwith spring-data-jpapostgres db一个表.

我正在尝试将INSERT10 000条记录循环到表中并测量执行时间 - 为每100条记录启用或禁用类的flush()方法EntityManager.

预期的结果是启用flush()方法的执行时间比使用禁用的方法要少得多,但实际上我得到了相反的结果.

UserService.java

package sample.data;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    UserRepository userRepository;

    public User save(User user) {
        return userRepository.save(user);
    }
}
Run Code Online (Sandbox Code Playgroud)

UserRepository.java

package sample.data;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> { }
Run Code Online (Sandbox Code Playgroud)

Application.java

package sample;

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.transaction.annotation.Transactional;

import sample.data.User; …
Run Code Online (Sandbox Code Playgroud)

java flush entitymanager spring-data-jpa spring-boot

13
推荐指数
2
解决办法
1449
查看次数

JPA EntityManager,它是如何工作的?

对于noob问题很抱歉,但我遇到了JPA + Hibernate的问题,所以我觉得有些事情在我脑海里并不清楚.我有一些实体,比如A,B,C,D,我编写了AMethods,BMethods,CMethods,DMethods.每个*Methods类都包含通过EntityManagerFactory进行的EntityManager初始化以及一些基本上执行查询的方法.我不知道我是否应该使用单例模式(因此我有每个*Method类的EntityManager)或者每次执行查询时我是否需要打开和关闭EntityManager,或者我是否持久保存/删除实体...你能帮助我吗??

hibernate jpa entitymanager

12
推荐指数
1
解决办法
2万
查看次数

Java/JPA | 使用指定的继承类型进行查询

我正在构建一个通用表"Sample"的查询,我有几个类型继承自此表"SampleOne","SampleTwo".我需要一个像这样的查询:

select s from Sample where s.type = :type
Run Code Online (Sandbox Code Playgroud)

其中type将是表的鉴别值.是否可以以任何方式(并避免创建特定于实体的查询,每个SampleOne,SampleTwo ...等)

我非常感谢本主题的任何意见,

亲切的问候,P.

java jpa entitymanager

12
推荐指数
1
解决办法
2万
查看次数

@PersistenceContext Spring和Java EE中的EntityManager线程安全性

EntityManager根据定义,它不是线程安全的.Servlets规范说,在非分布式环境中,如果没有实现SingleThreadModel,每个定义只有一个servlet实例.

因此,在Java EE中,当您EntityManager通过@PersistenceContextServlet的字段注入时- 它不是线程安全的:

public class MyServlet extends HttpServlet {

    // Not thread-safe, should be using EMF instead.
    @PersistenceContext
    private EntityManager em;
}
Run Code Online (Sandbox Code Playgroud)
  1. 这是正确的说,即使Spring bean的默认范围是单例,它EntityManager是线程安全的,因为Spring ThreadLocal用来绑定它的事务和EntityManager它?

  2. 上面的Servlets示例在Spring中仍然有效吗?它仍然不是线程安全的吗?

  3. ThreadLocal方法是否仅适用于Spring托管bean,而普通servlet不是其中之一?

  4. 据我所知,注入的是容器的责任EntityManager.在Glassfish Java EE实现中,应用程序服务器发现了@PersistenceContextas注入点.
    它在Spring中看起来如何?Spring Framework是否负责发现这些注释或JPA实现者的责任?

spring thread-safety entitymanager java-ee-6 jpa-2.0

12
推荐指数
1
解决办法
4103
查看次数

JPA与Hibernate错误:[PersistenceUnit:JPA]无法构建EntityManagerFactory

我有Java Persistence API和Hibernate的问题.我的项目情况是:

在此输入图像描述

我的persistence.xml文件是:

<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_2_0.xsd"
    version="2.0">
    <persistence-unit name="JPA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.david.Libro</class>
        <class>com.david.Categoria</class>
        <properties>
            <property name="hibernate.show_sql" value="true" />
            <property name="javax.persistence.transactionType" value="RESOURCE_LOCAL" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/arquitecturaJava" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

我创建了EntityManagerFactory:

private static EntityManagerFactory buildEntityManagerFactory() 
    {
        try 
        {
            return Persistence.createEntityManagerFactory("JPA");
        } 
        catch (Throwable ex) 
        {
                    ex.printStackTrace();
            //throw new RuntimeException("Error al crear la factoria de JPA:->"+ ex.getMessage());
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的错误是关于创建EntityManagerFactory:

    javax.persistence.PersistenceException: [PersistenceUnit: JPA] Unable …
Run Code Online (Sandbox Code Playgroud)

eclipse hibernate entitymanager jpa-2.0

12
推荐指数
1
解决办法
10万
查看次数

如何在构造函数中调用实体管理器?

我一直在尝试调用Entity Manager构造函数:

function __construct()
{
    $this->getDoctrine()->getEntityManager();
    ...
Run Code Online (Sandbox Code Playgroud)

但是,正如我在这个答案中看到的:Stackoverflow问题,它无法完成.

所以我想知道是否有办法实现它,因为我必须经常调用它,并希望在获取存储库后在构造函数中做一些事情.

编辑:

我试过@MKhalidJunaid回答:

//src/MSD/HomeBundle/Resources/config/services.yml
services:
  imageTransController.custom.service:
    class:  MSD\HomeBundle\Controller\ImageTransController
    arguments: 
        EntityManager: "@doctrine.orm.entity_manager"
Run Code Online (Sandbox Code Playgroud)

-

//app/config/config.php
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: doctrine_extensions.yml }
- { resource: "@MSDHomeBundle/Resources/config/services.yml" }
Run Code Online (Sandbox Code Playgroud)

-

//src/MSD/HomeBundle/Controller/ImageTransController.php
namespace MSD\HomeBundle\Controller;

use Doctrine\ORM\EntityManager;
use MSD\HomeBundle\Entity\Imagen as Imagen;
use MSD\HomeBundle\Controller\HomeController as HomeController;


class ImageTransController extends HomeController
{
    protected $em ;

    function __construct(EntityManager $entityManager)
    {
    ...
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

Catchable Fatal Error: Catchable Fatal Error: …
Run Code Online (Sandbox Code Playgroud)

php constructor entitymanager symfony

12
推荐指数
2
解决办法
2万
查看次数

模型中的Symfony2 entityManager

我将在我的模型中使用entity_manager.但是entity_manager仅在控制器中可用:throw $em = $this->get('doctrine.orm.entity_manager').所以,我必须用$em参数定义模型方法.这使得phpUnit测试非常困难并且违反了应用程序结构.例如:

class Settings
{
    public static function getParam( $em, $key )
    {
        $em->createQuery("
            SELECT s
            FROM FrontendBundle:Settings s
            WHERE s.param = {$key}
        ");
        return $em->getResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有在模型部分使用entity_manager服务的方法?

model-view-controller doctrine entitymanager symfony

11
推荐指数
2
解决办法
1万
查看次数

如何在CDI(焊接)中注入EntityManager?

在我的项目中,我在持久层中使用JSF + JPA + CDI + WildFly 8.2.我有一个BasicDao,像这样:

 public  class BasicDao<M, K> {
    private org.jboss.logging.Logger logger = org.jboss.logging.Logger
           .getLogger("BasicDao");

    @Inject
    @Primary
    protected EntityManager em;
    Class<M> mclass;

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    @Transactional(value=TxType.NOT_SUPPORTED)
    public M find(K id){ 
        return em.find(mclass, id);
    }

    @Transactional(value=TxType.REQUIRED)
    public void insert(M inst){
        this.em.persist(inst);
    }

    @SuppressWarnings("unchecked")
    @Transactional(value=TxType.REQUIRED)
    public K insertWithAutoId(M inst){
        this.em.persist(inst);
        return (K) this.em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(inst);
    }

    @Transactional(value=TxType.REQUIRED)
    public M update(M updated){
        return this.em.merge(updated);
    }


    @Transactional(value=TxType.REQUIRED)
    public void …
Run Code Online (Sandbox Code Playgroud)

jpa entitymanager cdi weld wildfly

11
推荐指数
1
解决办法
1万
查看次数