标签: entitymanager

JTA EntityManager不能使用getTransaction()[Spring + Hibernate + EntityManager]

我正在使用Spring + JPA + Hibernate + EntityManager与数据库进行通信.我得到'A JTA EntityManager无法使用getTransaction() '错误.请提供您的见解并帮助我解决问题.

beans.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="byName"
    ... xmlns definitions...
      xsi:schemaLocation="...">

    <context:component-scan base-package="com.mycompany.myproject" />

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" />
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

    <bean id="myDAO" class="com.mycompany.myproject.dao.myDAO" />

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven />
</beans>
Run Code Online (Sandbox Code Playgroud)

persistence.xml中

<?xml version="1.0" encoding="UTF-8"?>
<persistence ... xmlns definitions xsi:schemaLocation="..." version="1.0">
    <persistence-unit name="TEST_DS">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/TEST_DS</jta-data-source>
        <class>com.twinspires.exchange.model.Test</class>
        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="validate" /> <!-- create-drop update -->
            <property …
Run Code Online (Sandbox Code Playgroud)

spring hibernate jpa entitymanager

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

无法使用JPA EntityManager

我想用Java实现一个能够与数据库交互的程序.我已经使用EJB做了类似的事情,但这次我需要它能够在没有应用程序服务器的情况下工作.到目前为止我所做的是(使用Eclipse):

  • 创建数据库连接
  • 创建一个JPA项目
  • 创建实体(正确映射)
  • 设置persistence.xml(在META-INF文件夹中)
  • 导入MySQL JDBC Driver库和persistence-api-1.0.2.jar

这是我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
    <persistence-unit name="top" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>database.Match</class>
        <class>database.Player</class>
        <class>database.Tournament</class>
        <properties>
            <property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/top"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="root"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用的方法EntityManager:

private static EntityManagerFactory factory;
private EntityManager entityManager;

public DBManager() {
    factory = Persistence.createEntityManagerFactory("top");
    entityManager = …
Run Code Online (Sandbox Code Playgroud)

persistence hibernate jpa entitymanager persistence.xml

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

如何返回一组持久化对象?

我有一个类,其中包含通过实体管理器创建客户对象的方法。我想添加另一个方法,该方法将返回一组创建的对象;对于我的情况我该怎么做?例如,我有以下代码:

public class DefaultCoreRepository implements CoreRepository {

private EntityManager entityManager;

@PersistenceContext(unitName = "crm-db")
public void setEntityManager(EntityManager entityManager) {
    this.entityManager = entityManager;
}

private <T> T persist(T entity) {
    entityManager.persist(entity);
    return entity;
}

public void createCustomer(Customer customer) {
    persist(customer);
}

public Set<Customer> getCustomers() {
    //Code to be written here
}
Run Code Online (Sandbox Code Playgroud)

java spring jpa entitymanager

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

在cli-config.php中调用GetEntityManager()中的未定义函数

我尝试从作曲家安装doctrine2 orm,它是成功的,我设置了我的bootstrap.php,如下图所示

<?php
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(dirname(__FILE__)));
// bootstrap.php
require_once "vendor/autoload.php";

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

$paths = array(ROOT.DS.'library'.DS.'doctrine/entities/');
$isDevMode = false;

// the connection configuration
$dbParams = array(
'driver'   => 'pdo_mysql',
'user'     => 'root',
'password' => '',
'dbname'   => 'meso',
);

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);

?>
Run Code Online (Sandbox Code Playgroud)

这是我的cli-config.php

<?php
use Doctrine\ORM\Tools\Console\ConsoleRunner;

// replace with file to your own project bootstrap
require_once 'bootstrap.php';

// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();

return ConsoleRunner::createHelperSet($entityManager); …
Run Code Online (Sandbox Code Playgroud)

mapping orm doctrine entitymanager undefined-function

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

如何使用 JPA EntityManager 注册自定义 Hibernate IdentifierGenerator?

当使用普通 Hibernate 时,可以通过以下方式完成:

public class MyLocalSessionFactoryBean extends LocalSessionFactoryBean {

    // can also be made configurable e.g. with Springs EL...
    private Class myIdentifierGeneratorClass = MyIdentifierGeneratorClass.class;

    @Override
    protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {

        Configuration config = getConfiguration();
        MutableIdentifierGeneratorFactory identifierGeneratorFactory = config.getIdentifierGeneratorFactory();
        identifierGeneratorFactory.register("xyz", myIdentifierGeneratorClass);

        return super.buildSessionFactory(sfb);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在可以写例如

@MappedSuperclass
public class BaseEntity implements Serializable {

    @Id
    @GeneratedValue(generator = "generatorName")
    @GenericGenerator(name = "generatorName", strategy = "xyz")
    private Long id;
}
Run Code Online (Sandbox Code Playgroud)

使用 Hibernate JPA EntityManager 时如何实现这一点?

也许通过利用LocalContainerEntityManagerFactoryBean#postProcessEntityManagerFactory(EntityManagerFactory emf, PersistenceUnitInfo pui)

我也发现了EntityManagerFactoryBuilderImpl#buildHibernateConfiguration(ServiceRegistry serviceRegistry) …

hibernate jpa sessionfactory entitymanager spring-data

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

遇到数组值参数绑定,但期待 [java.lang.String (n/a)]

我需要根据传递的参数动态生成查询并需要加入三个表,在使用 EntityManager CriteriaBuilder 构建查询时遇到异常,如果我将其转换为 Criteria,则相同的代码结构正在工作,但我只想使用 CriteriaBuilder。

        @Override
    @Transactional
    public List<DatapointReply> getAllByFilter(Map<String, List<Object>> filter, int maxResults,
            boolean matchAllFilters) {
        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<DatapointReply> criteriaQuery = criteriaBuilder.createQuery(DatapointReply.class);
        Root<PartDatapointReply> datapointReplyRoot = criteriaQuery.from(PartDatapointReply.class);
        Join<DatapointReply, Datapoint> datapointJoin = null;
        Join<PartDatapointReply, Part> partJoin = null;
        criteriaQuery.select(datapointReplyRoot);
        if (filter.containsKey("datapointkey")) {
            datapointJoin = datapointReplyRoot.join("datapoint");
        }
        if (filter.containsKey("partstatus") || filter.containsKey("partmodelnumber")) {
            partJoin = datapointReplyRoot.join("part");
        }

        List<Predicate> predicateList = new ArrayList<>();
        for (String searchKey : filter.keySet()) {
            List<Object> searchTerms = filter.get(searchKey);
            Predicate predicate = buildSearchCriterion(new String[searchTerms.size()], true, JunctionType.OR, datapointReplyRoot, …
Run Code Online (Sandbox Code Playgroud)

jpa entitymanager hibernate-criteria jpa-2.0 hibernate-5.x

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

何时以及为何在 MikroOrm 中使用 em.clear()

我对 MikroOrm 或任何类似实体管理器中的功能有点困惑em.clear()https://mikro-orm.io/docs/entity-manager方法的链接clear()

我似乎有一些关于一般 EntityManager 的 stackoverflow 答案说我需要clear()在每次调用后调用persist/remove and flush以避免任何内存问题。

为了使这个问题更具体地适合我的情况,据说我在我的应用程序中建立了一个Graphql端点。有一些通用的 CRUD 函数供用户调用,每个函数都会MikroOrm entity利用一些 MikroOrm 函数(例如findOne()等)创建一个对数据库进行一些通用 CRUD 操作的函数。

这是否意味着我需要clear()每次调用persist/remove and flush(如果有一些 CUD 操作)甚至仅读取数据?如果我不调用这个方法会发生什么?

entitymanager mikro-orm

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

Hibernate v3.6:EntityManager方法问题"刷新"

以下代码在调用"em.refresh(p)"时抛出异常:

1: EntityManager em = emf.createEntityManager();
2: em.getTransaction().begin();
3:
4: Product p = new Product("J&D", 35.0,"Whisky");
5: em.persist(p);
6:
7: em.refresh(p);
8: em.getTransaction().commit();
9: em.close();
Run Code Online (Sandbox Code Playgroud)

在调试代码时,我们看到Hibernate没有在第6行将记录写入数据库.他的确如预见 - 当需要时,而不是更早.

在第7行,我们得到以下异常:线程"main"中的异常javax.persistence.PersistenceException:org.hibernate.HibernateException:此实例尚未作为数据库中的行存在

当我们强制Hibernate在第6行将记录刷新到DB时,执行INSERT并且不会发生错误.我们可以通过执行select或只强制刷新来执行此操作(具有所有后果):

6 : em.createQuery("select p from Product p").getResultList();
6 : em.flush();
Run Code Online (Sandbox Code Playgroud)

我的问题:如果方法"刷新"不强制Hibernate将记录写入数据库,那么我们之前放置的select或flush语句也是如此?(这可能是个错误吗?).

提前感谢您的回答.

皮埃尔

orm hibernate jpa entitymanager jpa-2.0

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

EntityManager getRepository,方法find(id)返回控制器

我的问题是,当我尝试使用$em->find方法查找数据库记录时,它返回一个Controller.

让我举一个例子:

Neostat\DiagnosticoBundle\Controller\ComponentController.php:

$em = $this->getDoctrine()->getEntityManager();
$diagnostico = $em->getRepository('NeostatDiagnosticoBundle:Diagnostico')->find($id);
var_dump(get_class($diagnostico));
Run Code Online (Sandbox Code Playgroud)

它回来了Neostat\DiagnosticoBundle\Controller\ComponentController.

但我有一个名为实体Diagnostico.phpsrc/Neostat/DiagnosticoBundle/Entity/Diagnostico.php:

namespace Neostat\DiagnosticoBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Neostat\PacienteBundle\Entity\Paciente;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * Diagnostico
 *
 * @ORM\Table(name="diagnostico")
 * @ORM\Entity(repositoryClass="Neostat\DiagnosticoBundle\Entity\DiagnosticoRepository")
 * @UniqueEntity(fields={"nombre"}, message="Ya existe un diagnostico con ese nombre.")
 */
class Diagnostico
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
private $id;

// etc...
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

php doctrine entitymanager symfony

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

Symfony2 EntityManager不经过持久更新

正如你在下面看到的,我根本没有"坚持".但我所做的改变是注册.我很感激你的帮助.

$entityManager = $this->getDoctrine()->getManager(); $entity = $entityManager->getRepository(City::class)->find(1); $entity->setName("debug name"); $entityManager->flush();

doctrine entitymanager symfony

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