标签: entitymanager

如何在Spring Roo中使用JUnit测试?(EntityManager的问题)

我正在尝试为Spring Roo项目编写JUnit测试.如果我的测试需要使用实体类,我会得到以下异常:

java.lang.IllegalStateException: Entity manager has not been injected 
(is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)
Run Code Online (Sandbox Code Playgroud)

Spring Aspects JAR看起来配置正确.特别是,我在pom.xml文件中有以下内容:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
  <version>${spring.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

<plugin>
  <configuration>
  <outxml>true</outxml>
  <aspectLibraries>
    <aspectLibrary>
      <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
    </aspectLibrary>
  </aspectLibraries>
  <source>1.6</source>
  <target>1.6</target>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

当没有从JUnit测试调用时,使用实体类的类工作正常.知道如何设置,以便从JUnit测试中注入实体管理器吗?

这是我的Test类(或多或少):

public class ServiceExampleTest {

  @Test
  public void testFoo() {
    FooService fs = new FooServiceImpl();
    Set<Foo> foos = fs.getFoos();
  }
}
Run Code Online (Sandbox Code Playgroud)

这足以抛出异常.FooServiceImpl类返回一个Foo,其中Foo是一个实体类.该getFoos()应用程序时,通常的方式运行方法的工作.问题只出在单元测试的背景下.

java junit entitymanager spring-roo

6
推荐指数
2
解决办法
7075
查看次数

如何以编程方式将持久化上下文注入到不同的数据源中

在标准EJB 3中,当注入实体管理器时,持久性单元(指数据源)被硬编码到注释中:(或者xml文件)

@PersistenceContext(unitName = "myunit")
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)

有没有办法使用实体管理器,但在运行时按名称选择数据源?

persistence jpa entitymanager ejb-3.0

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

持久化实体时的javax.ejb.EJBException

我有一个名为Medico的实体,它是从数据库创建的实体类,因此我认为实体定义在这里是安全的,但定义如下:

@Entity
@Table(name = "medico")
@XmlRootElement
@NamedQueries({All named queries here})
public class Medico implements Serializable {
private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "idMedico")
    private Integer idMedico;
    @Basic(optional = false)
    @NotNull
    @Column(name = "Identificacion")
    private int identificacion;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 33)
    @Column(name = "Primer_Nombre")
    private String primerNombre;
    @Size(max = 33)
    @Column(name = "Segundo_Nombre")
    private String segundoNombre;
    @Basic(optional = false)
    @NotNull
    @Size(min = …
Run Code Online (Sandbox Code Playgroud)

java entitymanager jpa-2.0

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

JPA如何识别具有相同名称但在不同包中的两个类?

我为我的项目使用JPA和Hibernate.我有两个具有相同名称但在不同包中的类.他们是:

@Entity(name = "X_USER")
@Table(name = "X_USER")
public class User {
Run Code Online (Sandbox Code Playgroud)

和:

@Entity
@Table(name="Y_USER")
public class User {
Run Code Online (Sandbox Code Playgroud)

我正在创建一个搜索查询:.getSimpleName()但它没有用,因为它们的简单名称是相同的.我改成了.getName().

但是,它仍然会让人感到困惑User.

编辑:

我有这个:

SELECT_BY_PROPERTY_QUERY = "SELECT p FROM :CLASS: p WHERE p.:PROPNAME:=?";
Run Code Online (Sandbox Code Playgroud)

那我:

SELECT_BY_PROPERTY_QUERY.replaceFirst(":CLASS:", clazz.getName()).replaceFirst(":PROPNAME:", propertyName);
Run Code Online (Sandbox Code Playgroud)

当我调试它时,它会像:

Select p from User p Where p.name=?
Run Code Online (Sandbox Code Playgroud)

它仍然是User,它不包括包信息,并返回错误的User类.

java hibernate jpa entitymanager

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

Doctrine实体管理器中的Symfony2子查询

我需要执行此查询:

SELECT * FROM (SELECT * FROM product WHERE car = 'large' ORDER BY onSale DESC) AS product_ordered GROUP BY type
Run Code Online (Sandbox Code Playgroud)

在Symfony2中使用实体管理器.

我的基本查询构建器将是:

 $query = $em->getRepository('AutomotiveBundle:Car')
        ->createQueryBuilder('p')
        ->where('pr.car = ?1')
        ->andWhere('pr.status = 1')
        ->orderBy('pr.onSale', 'DESC')
        ->setParameter(1, $product->getName())
        ->groupBy('p.type')
        ->getQuery();
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何在子查询中添加.

我试过单独的查询并加入它像:

 ->andWhere($query->expr()->in('pr.car = ?1',$query2->getQuery()));
Run Code Online (Sandbox Code Playgroud)

但我得到:

Call to undefined method Doctrine\ORM\Query::expr()
Run Code Online (Sandbox Code Playgroud)

doctrine entitymanager query-builder symfony

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

EntityManager无法使用persist将元素保存到数据库

我遇到了使用EntityManager将元素持久化到数据库的问题.根据我发现的答案,我在DaoJpa中尝试了这4种方法来做这样的事情,但仍然失败了.在这里,我附上了我尝试的四种方式:

控制器部分代码:

   @Transactional 
   SmartProduct smartProduct = new SmartProduct();
            smartProduct.setName("Dove Soap");
            smartProductDao.persist(smartProduct);
Run Code Online (Sandbox Code Playgroud)

1.DaoJpa:

 @Transactional
 public void persist(SmartProduct smartProduct) {
            entityManager.persist(smartProduct);
Run Code Online (Sandbox Code Playgroud)

不行!

2.

@Transactional
public void persist(SmartProduct smartProduct) {
entityManager.persist(smartProduct);
entityManager.flush();
Run Code Online (Sandbox Code Playgroud)

我得到的例外:没有交易正在进行中

3.

@Transactional
public void persist(SmartProduct smartProduct) {
EntityTransaction emTransaction = entityManager.getTransaction();
        emTransaction.begin();  
        entityManager.persist(smartProduct);
        emTransaction.commit();
        entityManager.close();
Run Code Online (Sandbox Code Playgroud)

我得到的例外:不允许在共享的EntityManager上创建事务 - 使用Spring事务或EJB CMT

4.

@Transactional
public void persist(SmartProduct smartProduct) {
                    EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
                EntityManager em = emf.createEntityManager();
                EntityTransaction etx = em.getTransaction();
                etx.begin();
                em.persist(smartProduct);
                etx.commit();
                em.close();
                emf.close();
Run Code Online (Sandbox Code Playgroud)

我得到的例外:应用程序必须提供JDBC连接

有人可以帮我解决问题吗?提前谢谢了!

非常感谢JustinKSU的帮助.我在Spring上下文中添加了注释,然后它就解决了!这是我的Spring上下文的上一个版本:

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
        <property …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate entitymanager

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

从Exception重新启动实体管理器

如何重置/重新启动实体管理器?

看看Doctrines文档:

我看到实体经理关闭的例外情况.这对我来说是一个问题,因为我有一个RabbitMQ服务器并且消费者总是在运行.Durring测试我们正在嘲笑不同的场景,缺少的数据就是其中之一.这应该导致和异常,我们的Try/Catch逻辑工作得很好,除了它还关闭了实体管理器.

读取他们所拥有或已经有相同或相关问题的其他线程,我没有看到重新启动EM的明确方法.

有什么想法吗?

有关:

php exception entitymanager symfony doctrine-orm

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

JPQL更新查询执行更新时的事务需要异常

我尝试运行此代码时收到此错误.

错误:

javax.persistence.TransactionRequiredException:通过容器管理的事务EntityManager的非事务性访问获得的Query对象不支持executeUpdate

代码:(_ut是UserTransaction对象)

public void setMainCategory(Integer deptId,Integer catId){

        try {
            Query setmain = _entityManager.createNamedQuery("Category.setAsMain");
            Query removeMain = _entityManager.createNamedQuery("Category.removeMain");
            setmain.setParameter("categoryId", catId);
            Department d;
            d=_entityManager.find(Department.class, deptId);
            removeMain.setParameter("department", d);
            _ut.begin();
            removeMain.executeUpdate();
            _ut.commit();
            _ut.begin();
            setmain.executeUpdate();
            _ut.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我有其他功能在实现上相同,他们不会抛出此错误.

任何建议将不胜感激.

谢谢.

jpa transactions entitymanager jpql sql-update

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

如何从Entity Manager获取jpa数据源属性

大家好

我想知道是否可以通过实体管理器获取数据库连接属性.

我的persistence.xml看起来像这样

<persistence ...>
     <persistence-unit name="default" transaction-type="JTA">
          <jta-data-source>DatasourceForTestSystem</jta-data-source>
          <class> some.package.and.some.Class </class>
          ...
     </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

String host = em.getSomeFunction().getProperties().get("server");
String database = em.getSomeFunction().getProperties().get("database");
or
String url = em.getSomeFunction().getConnectionPool().getURL();
Run Code Online (Sandbox Code Playgroud)

url是什么样的jdbc:oracle:thin:@1.2.3.4:5678:database.我正在使用带有EclipseLink的JDeveloper 12c,一个Oracle数据库和NO Hibernate.

有人知道如何获取有关连接属性的信息吗?

亲切的问候,

STEFI

- 更新 -

@Kostja:再次请求你的帮助,但正如我在帖子中提到的,我根本不使用Hibernate.

我已经尝试过像这样使用Connection.class了

java.sql.Connection conn = em.unwrap(java.sql.Connection.class);
Run Code Online (Sandbox Code Playgroud)

这里开始.我总是在这个语句中为Connection和getSession()提供NPE

((JNDIConnector)em.unwrap(JpaEntityManager.class)
    .getSession().getLogin().getConnector()).getName();
Run Code Online (Sandbox Code Playgroud)

这里开始.

我很安静,为什么这些解决方案对我有用.也许我错过了什么:-(

java jpa jta entitymanager

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

苦苦挣扎,了解EntityManager的正确使用方法

我正在开始一个新项目,我对JPA/Hibernate的使用完全不熟悉.我正在尝试了解如何正确使用EntityManager.更准确地说,何时实例化它们,我需要多少,如果我关闭它们,我应该把所有东西都放到交易中吗?

无论如何,在我当前的代码中,我在尝试读取之前保存的实体时遇到了org.hibernate.LazyInitializationException.我会理解相反的事情(在事务中读取一个antity然后尝试在另一个事务中保存读取实体但是由于事务已经结束,实体是非托管的,因此保存失败),但这是我无法理解的.

我把我的代码放在GitHub上(https://github.com/GaetanLeu/intl),它只是几个类.我的主要是在src/sandbox/MessageSandbox.java中,它在第28行失败,带有以下stacktrace:

Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164)
    at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
    at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
    at entity.MessageKey_$$_jvstfcc_0.toString(MessageKey_$$_jvstfcc_0.java)
    at java.lang.String.valueOf(String.java:2854)
    at java.lang.StringBuilder.append(StringBuilder.java:128)
    at com.google.common.base.Present.toString(Present.java:88)
    at java.lang.String.valueOf(String.java:2854)
    at java.io.PrintStream.println(PrintStream.java:821)
    at sandbox.MessageSandbox.main(MessageSandbox.java:28)
Run Code Online (Sandbox Code Playgroud)

另外我收到来自Hibernate的警告说我的EntityManager已经存在,那么会发生什么?EntityManagerFactory.createEntityManager方法是否返回现有的方法?

WARN: HHH000436: Entity manager factory name (intl) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
Run Code Online (Sandbox Code Playgroud)

真的,我迷失了什么时候创建EntityManagers ^^任何帮助将不胜感激,但请简单的解释我真的很新.

哦顺便说一下,我想确切地说我没有使用Spring,我没有EJB,我想现在手动操作EntityManagers直到我理解它为止.谢谢 :)

hibernate jpa entitymanager

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