问题标签 [entitymanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4682 浏览

java - JPA - 延迟加载 - LazyInitializationException - 不访问子集合时

我正在使用 Stripes、Spring、JPA 和 Hibernate 构建一个项目,并且有一个包含多对一子集合的对象。我已将加载设置为惰性,例如。

现在,当我从数据库中获取这些对象的集合时,我得到了 LazyInitializationException,即使我在任何阶段都没有直接访问子集合。

我认为延迟加载意味着它只会在引用子对象集合时实例化它?我曾尝试查看类似的问题,但无法弄清楚这一切,因此希望得到任何澄清。

有趣的是,我一直都设置了这种关系,但只有在我将数据库更改为与子表具有正确的外键关系时才真正注意到异常。

编辑:堆栈跟踪:

堆栈跟踪:

0 投票
4 回答
3325 浏览

java - 如何在多层环境(REST + EJB + Core)中使用 JPA EclipseLink 连接数据库?

我正在使用 Glassfish v3 服务器。

通常与 EJB3 + JPA (Eclipselink) 的数据库连接是通过注入完成的,使用 @PersistenceUnit 或 @Persistencecontext。

但是,我的 App 中有 3 层:

  • 核心(包含业务逻辑、实体、异常处理等)

  • 在它之上的 EJB,调用正确的核心对象和方法来完成这项工作。这个 EJB 被我们 ERP 的其他内部模块调用。

  • 其之上的 REST 层供前端网站使用。

我不想在 EJB 中获得 entityManager,也不想获得 EMF(EM 工厂),因为我希望我的中间层不知道它下面使用了一个 DB。毕竟,我以后可以决定将我的核心实现更改为不使用 DB 的实现。

我只看到两个不好的解决方案:

  • 1)每次调用需要DB连接的核心层方法时添加一个EM参数。非常丑陋,与我上面所说的背道而驰。

  • 2)在需要数据库连接的每个核心方法中,我创建了一个工厂、一个 EM,使用它们,然后将它们都关闭。

我试图在中间切开一些东西,每个核心级别的类都有一个工厂,并且在每种方法中都创建和关闭了 EM。但我仍然有这样的内存泄漏:

我想这是因为如果我的 EJB 方法之一使用 10 个不同的对象,它会创建 10 个 EM 工厂,并且没有一个是关闭的。

Core 对象中的典型用法示例:

我应该去解决方案2吗?有没有办法在这个核心级别使用单个 EM 工厂?我似乎 JPA 规范假设您将仅在 EJB 级别使用实体,这在多层应用程序中是不好的。

编辑:这是尝试 @Inject 后的当前状态:

  • 在我的 CORE jar 的 /META-INF 目录中添加了一个空 beans.xml 文件。

  • 父 DAO 类现在是这样的:

    公共类 ExampleBZL {

    /li>
  • Emf 类非常简单,而且是无状态的。

    @Stateless 公共类 Emf 实现 EmfAbstract {

    }

我一定是做错了什么,但注入不起作用,尽管在 glassfish 中我在引擎列表中看到“[ejb,weld,web]”,因此加载了 CDI。

我是否缺少其他注释?用这两个小注释(一侧是无状态,另一侧是注入)在 JAR 中进行注入真的有效吗?

0 投票
2 回答
2057 浏览

java - SEAM:如何在动态加载的类中获取 EntityManager 和 Logger?

我有一个每 10 分钟运行一次的后台服务。

该服务在数据库中查询要执行的作业,将根据作业加载具有不同业务逻辑的类(使用 Class.forName())。当然,它们实现了相同的接口。

我将这些类声明为 SEAM 组件,但是当我尝试使用 entityManager 或 Logger 时,我得到了 NPE。

回答我自己的问题,我想这是因为 Class.forName() 属于 SEAM 的注入机制,它没有机会注入依赖项。

在我加载类之后,我可能可以通过自己注入这些来解决这个问题。有没有更好的方法来做到这一点?

谢谢!

0 投票
1 回答
1144 浏览

java - EntityManager 未注入

我正在为我的 EntityManager 获取 NPE,但不知道为什么 - 谁能发现我的错误?

UserManagerImpl.java

META-INF/persistence.xml

这些在我的 ejb jar 项目中,从 JSP 调用 UserManagerImpl,但不确定是否会有所作为。

提前致谢。

0 投票
1 回答
100 浏览

java - 如何更改此查询以使其返回满足 `minPrice` 条件的记录,即使 `keywords` 值为空?

我不知道这是否是特定于 Google App Engine for Java 的问题,但如果设置为keywords参数的值是空字符串,则查询不会返回任何内容,即使minPrice设置了 a 也是如此。

minPrice即使keywords值为空,如何更改此查询以使其返回满足条件的记录?理想情况下,我会以某种方式对这两个条件使用相同的查询,而无需基于空字符串条件创建单独的查询。

0 投票
1 回答
1586 浏览

java - 如何在 JPA 和 EJB3 中使用 JDBC ClientInfo

我们正在将基于 JDBC 的应用程序迁移到 JPA 和 EJB3。我们的旧应用程序使用 Connect#setClientInfo API 将当前用户名记录为客户端信息的一部分:http: //download.oracle.com/javase/6/docs/api/java/sql/Connection.html#setClientInfo% 28java.lang.String,%20java.lang.String%29

我们需要在 EJB3 项目中做类似的事情。如何?

我们可以在 EJB 服务调用周围使用 EJB3 拦截器,以捕获当前用户并将其设置为数据源上的信息。但是,我看到了这个问题。我认为无法保证 JPA flush() 何时发生。如果您在拦截器中设置客户端信息,进行一些更新,然后返回,则可能在您的 bean(和拦截器)超出范围之后很久才会发生 flush() 和实际的数据库写入。这个对吗?

我相信 JPA 和 EntityManagers 是连接的抽象,你不能可靠地设置连接上的客户端信息。对或错?

0 投票
1 回答
1371 浏览

ejb-3.0 - 如何定义 EJB3 会话 bean 的构造函数

我正在创建一个 EJB3 模块,它试图尊重特定的外观/实现设计模式。我的外观应该完全没有 EJB。

我在这个模块中有 2 个类:一个实体 bean 和一个会话 bean,它是这个实体的管理器。管理器包含一个 EntityManager 属性。

我还有一个工厂实例化我的管理器 bean,但是这个工厂不知道管理器的实现(因此不知道 EJB)。工厂只能使用属性文件检索管理器类的名称。然后工厂将实例化管理器:

我的问题是:我可以在经理的实现中声明一个构造函数,然后在该构造函数中初始化我的 EntityManager 吗?

通常,我只会使用 EntityManager 上方的 @PersistenceContext 注释:

但显然,当类被直接实例化时,这不起作用。

我试过这样的事情:

但后来我得到一个 NoInitialContextException,显然我的 JNDI 上下文没有正确初始化。

有人可以帮我吗?

谢谢

0 投票
1 回答
666 浏览

java - java 和 jboss,带有 SQL 服务器。使用实体管理器在本机查询中插入多个语句,不起作用;但在 sql 中工作

使用 eclpise 调试器我可以看到使用的字符串,当我复制并粘贴到 sql server management studio 时它工作正常 - 所以我猜这与不喜欢多行语句的实体管理器有关/go ... ?

感激地收到任何建议(是的,我知道 stringbuilder 等),我得到的错误是:

编辑 结果表明实体管理器和查询类不支持插入。所以我必须使用准备好的语句或持久化对象。

0 投票
2 回答
1268 浏览

java - JPA - 数据库仅在方法为 @Transactional 时更新

我遇到了一个我不太明白的问题——除非使用 DAO 的方法被注释为@Transactional,否则底层数据库不会得到更新。我的应用程序在 JPA/Hibernate、Spring 和 Wicket 上运行。这是为什么?

道:

服务:

如果我遗漏了@Transactional 注释,则数据库不会得到更新。

0 投票
3 回答
12643 浏览

java - JPA 1.0 错误:名称不是可识别的实体或标识符。已知实体名称:[]

当我尝试执行简单的 JPA 1.0 代码时出现以下异常。可能是什么原因?