问题标签 [hibernate-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.
java - 如何通过 Hibernate 的 session.createSQLQuery() 使用 JOIN
我有两个实体(表) - 员工和项目。一个员工可以有多个项目。项目表的 CREATOR_ID 字段是指 Employee 表的 ID 字段。Employee 实体不维护对 Project 的任何引用 - 但 Project 实体具有对 Employee 的引用。
使用 EntityManager 以下查询工作正常 -
但由于我有 LAZY 关联关系,我得到错误:
无法初始化代理 - 没有会话
如果我尝试从 Employee 实体访问项目信息。这是意料之中的,所以我使用 Hibernate 的 Session 来创建查询,如下所示。
但我收到如下错误:“列‘E’要么不在 FROM 列表中的任何表中,要么出现在连接规范中,并且超出了连接规范的范围......”
谁能建议这种情况下正确的 JOIN 语法是什么?如果我使用("SELECT * FROM EMPLOYEE_TAB E, ........")
- 它会给出其他错误:
java.lang.ClassCastException:[Ljava.lang.Object;不能转换为 com.im.server.dto.EmployeeDTO
.
提前致谢。
hibernate - Persistence.createEntityManagerFactory 清除整个数据库
我目前正在使用 Hibernate + JPA 进行项目。我不记得我在项目中所做的确切更改,但是每次我尝试实例化一个新的 EntityManagerFactory 时,它都会清除数据库中的所有数据。
这是代码片段:
在包含“Persistence.createEntityManagerFactory("hibernatePersistence")”的行中,整个数据库被清除。
我用尽了解决这个问题的所有想法......我希望你们能提供帮助。
提前致谢!
java - Hibernate SessionFactory 与 JPA EntityManagerFactory
我是 Hibernate 的新手,我不确定是使用 HibernateSessionFactory
还是 JPAEntityManagerFactory
来创建 Hibernate Session
。
这两者有什么区别?使用它们各自的优点和缺点是什么?
hibernate - 休眠实体管理器在查询之前自动刷新并将更改提交到事务中的数据库
我在 Jboss AS 6.0.0 final 上使用 Hibernate 3.6.0 和 JPA 2。在我的 EJB 中,有一种方法可以更新实体值并对其进行一些查询。整个方法在 BMT 事务中运行。如果有任何失败,所有更改都应该回滚,而不是提交给数据库。
数据库是 mySql。
在运行 JPA 查询之前,JPA 会自动将更改的状态刷新到 DB 以防止任何过时的数据返回。但是,在我的方法中,自动刷新直接更新并将更改提交到数据库,即使之后出现问题,更改也不会回滚。所以我想问一下我的设置是否有错误的配置,或者这是一个错误或什么。
EJB
持久性.xml
休眠.cfg.xml
mysql-ds.xml
经过进一步调查,我发现只要有刷新,脏更改就会被写入并直接提交给 DB。如果我删除了 flush(),一切正常。但是,在查询之前有系统触发的刷新,我认为这是必要的。
在我看来,数据库是自动提交的。我尝试将属性设置为hibernate.connection.autocommit
,false
但问题仍然存在,并提示违反规范的 EJB 警告。
更新:原因应该来自mysql。好像我切换到 mssql 服务器,问题就消失了。我也尝试了 mysql xa-datasource
,仍然没有运气......
hibernate - 在非托管环境中休眠
我遇到了一个小问题,我总是在具有 GenericDAO 模式的 Web 上使用 Hibernate 和 Spring,现在我将 Hibernate 用于不使用 EJB 之类的东西的 GUI 应用程序。
我的主要问题是我曾经有这个
@PersistenceContext(unitName = "persistenceUnit")
private EntityManager em;
但现在我这样做:
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit");
private EntityManager em = emf.createEntityManager();
刚刚注意到我的一个大缺陷是,每当我继承这个 GenericDAO 类时,我每次都会创建一个 EntityManagerFactory,我该怎么办?
编辑:
同意这将是解决它的最巧妙方法吗?
mysql - hibernate commit:在日志中显示已提交,但实际上并没有
请看一下这段代码。Persist 适用于名为 Candidate 的表,但不适用于另一个名为 VerifyLink 的表,而 hibernate 显示它正在持久化在日志文件中。请查看下面的日志,在第一种情况下它显示查询“插入候选”,但在第二种情况下,它不显示查询。怎么了 ?
当我第一次提交某事时
[#|2011-07-25T12:38:40.020+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|org.hibernate.ejb.EntityManagerImpl@15e3c52|#]
[#|2011-07-25T12:38:40.021+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|状态:0|#]
[#|2011-07-25T12:38:40.093+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|休眠:插入候选(comment、creation_date、currentCompany、current_ctc、cv、cv_name、dob、email_id、email_id_verified、expected_ctc、first_name、last_name、location、mobile、notice_period、password、sex、upadte_date、years_of_exp、cand_id)值( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|#]
[#|2011-07-25T12:38:40.164+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|已提交:|#]
[#|2011-07-25T12:38:40.165+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|交易结束:|#]
[#|2011-07-25T12:38:47.158+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|org.hibernate.ejb.EntityManagerImpl@1fd91c4|#]
[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|状态:0|#]
[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|已提交:|#]
[#|2011-07-25T12:38:47.159+0530|INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=61;_ThreadName=Thread-1 ;|交易结束:|#]
java - 过滤 JPA 实体而不将它们从数据库中删除
我有一个数据库表“viewmodule”,它本身有一个 FK(parent_id),以允许递归结构。
我的 Java 应用程序使用 JPA/Hibernate 来映射该表上的实体。我们已经修复了实体层级问题,这是通过使用表的“类型”列的@Discriminator 注释来解决的。
我现在的任务是加载该表中的所有元素(深入),但忽略那些将“隐藏”字段设置为 true 的元素。它显然是一个简单的过滤机制。我的第一种方法是使用 Hibernate Filter 注释,它在第一层(所有具有 parent_id = null 的视图模块)上运行良好。但过滤器不适用于“孩子”关系。(在我的现实生活模型中,我有不同类型的 ViewModules 的继承结构)
因此,我编写了一个小函数,递归遍历 viewModule 对象树,并从具有 hide=true 的子关系中删除 viewModules;
但是,由于所有对象仍处于 jpa/hibernate entityManager 的观察之下,因此从集合中删除的每个操作都直接作为数据库中的删除执行。所以我的过滤功能从数据库中删除了实体,这是一件坏事。
我尝试使用休眠会话中的“驱逐”方法在过滤之前分离实体,但这会导致 LazyInitialisationException。
所以,为了防止克隆我的所有对象,我的问题是如何解决这个问题?有没有办法以初始化所有集合的方式分离对象?或者是否有可以过滤集合的特殊 Kung-Fu Chuck-Norris JPA 注释?
提前致谢
java - EntityManager.unwrap() 抛出 java.lang.AbstractMethodError
我在我的应用程序中实现 JPA 2.0 时遇到了一些问题。我正在使用 Criteria 查询,我需要从 EntityManager 中获取会话。我按照以下方式(根据this) Session ses = entityManager.unwrap(Session.class);
在 Tomcat 7.0.8 之上运行后,我得到以下信息:
我还引用了以下与 Hibernate 相关的依赖项(我怀疑问题出在哪里):
对此有任何想法吗?
java - JPA - createEntityManagerFactory 返回 Null
菜鸟问题在这里。我正在按照这个示例/教程来尝试找出我在主要项目中不断遇到的问题。问题是, entityManagerFactory 不断返回 null (因此,在尝试运行第一个 JUnit 测试时,我得到了 NullPointerExcept。)
我目前在 Eclipse Indigo (JavaEE) - JRE7 - Hibernate 3.6.7 和 JBoss 7
这是我的persistence.xml(同样,从教程中摘取的copipasta)
到目前为止我已经尝试/发现的事情:
如果您尝试使用未在 persistence.xml 中列出的持久性单元创建工厂,似乎往往会发生此问题
仔细检查 Eclipse 的构建路径库中是否包含必要的 JAR,Google 建议这可能是导致 createEntityManagerFactory() 调用短路并返回 null 的可能原因(而不是仅仅抛出异常或记录消息)
可能是由于配置Hibernate 连接时可能出现的错误?
在过去的几周里,我一直在碰壁,所以不用说,任何帮助/一般方向提示都非常感谢:D
hibernate - 如何在 Hibernate JPA 中使用 EntityManager @FilterJoinTable?
我想限制来自 OneToMany 关系的数据。在我的程序中,老板帐户可以查看公司在给定月份和年份的所有订单。公司类可以统计这些订单的收入。我使用了@FilterJoinTable,但由于我必须使用 EntityManager 我不能再这样做了。这是我与 Session 对象一起使用的代码。
订单类
公司类
get 方法看起来像这样
get 方法仅返回在给定月份和年份有订单的公司。每个公司的 orderList 仅包含给定月份和年份的订单。我知道 get 方法并不漂亮,但它有效。你能告诉我如何解决这个问题吗?我一无所知。
感谢 Joshua Davis解决