问题标签 [hibernate]
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 - 在 JBoss 4.2 上使用 JPA 启用 Hibernate 二级缓存
在使用 Java Persistence API(注解实体)时,启用 Hibernate 的二级缓存需要哪些步骤?我如何检查它是否正常工作?我正在使用 JBoss 4.2.2.GA。
从 Hibernate 文档看来,我需要启用缓存并在persistence.xml中指定缓存提供程序,例如:
还需要什么?我需要向我的 JPA 实体添加@Cache注释吗?
如何判断缓存是否正常工作?我在运行查询后尝试访问缓存统计信息,但Statistics.getSecondLevelCacheStatistics返回 null,可能是因为我不知道要使用什么“区域”名称。
java - 寻找 HQL 构建器(休眠查询语言)
我正在寻找Java中的HQL构建器。我想摆脱这样的事情:
我宁愿有类似的东西:
我google了一下,没找到。
我写了一个适合我现在需要的又快又笨HqlBuilder
的东西,但我很想找到一个比我一个人拥有更多用户和测试的人。
注意:我希望能够做这样的事情以及更多,但我未能使用 Criteria API 做到这一点:
IE。从红利表中选择属性someValue
指向任何红利的所有股票。
谢谢!
java - 当使用带有休眠状态的条件查询时,如何将条件“或”在一起?
我正在尝试使用休眠条件查询对三个字段进行基本的“或”。
例子
我想构建一个条件查询,其中我的搜索字符串可以匹配“名称”或“地址”或“电话号码”。
java - 你什么时候可以/应该全力以赴地使用 ORM 方法?
在我看来,引入 ORM 工具应该可以让您的架构更整洁,但为了提高效率,我发现自己有时会绕过它并迭代 JDBC 结果集。这会导致不协调的工件缠结,而不是更清晰的架构。
这是因为我在无效的上下文中应用了该工具,还是比这更深?
你什么时候可以/应该全力以赴地使用 ORM 方法?
任何见解将不胜感激。
一点背景:
在我的环境中,我有大约 50 台客户端计算机和 1 台相当强大的 SQL Server。
我有一个桌面应用程序,其中所有 50 个客户端一直在访问数据。
该项目的数据模型出于各种原因(包括清晰度、效率等)经历了多次重组。
我的数据模型的历史
- JDBC直接调用
- DAO + POJO 没有 Pojos 之间的关系(基本上包装了 JDBC)。
- 添加了实现延迟加载的 POJO 之间的关系,但只是隐藏了 DAO 间调用
- 在看到它使数据访问变得多么“简单”(它使 POJO 之间的关系变得微不足道)并且因为它可以减少与许多相关实体一起工作时到数据库的往返次数后,跳上了 Hibernate 的潮流。
- 因为它是一个桌面应用程序,让 Sessions 长期保持打开状态是一场噩梦,所以它最终导致了很多问题
- 回到部分 DAO/Hibernate 方法,允许我在 DAO 幕后进行直接 JDBC 调用,同时使用 Hibernate。
hibernate - 如何使用休眠条件仅返回对象的一个元素而不是整个对象?
例如,我试图只获取对象 bob 的 id 列表,而不是 bob 的列表。可以使用 HQL 请求,但我会知道是否可以使用条件?
一个例子 :
java - 休眠 - 从 EHCache 到 TreeCache 的 maxElementsOnDisk
我正在将 Hibernate 应用程序的缓存从 EHCache 迁移到 JBoss TreeCache。我正在尝试找到如何配置等效于 maxElementsOnDisk 以限制磁盘上的缓存大小,但我找不到任何类似于在激活钝化的 FileCacheLoader 中配置的东西。
谢谢
java - 延迟加载属性和session.get问题
在 Hibernate 中,我们有两个类,其中包含以下具有 JPA 映射的类:
现在,当我们使用会话从数据库加载类 Foo 的对象时,例如:
Foo foo = (Foo)session.get(Foo.class, 1 /* or some other id that exists in the DB*/); foo 的 Bar 成员是一个代理对象(在我们的例子中是 javassist 代理,但它可以是 cglib 之一,具体取决于您使用的字节码提供程序),它没有被初始化。如果您随后使用 session.get 获取 Bar 对象,它是刚刚加载的 Foo 类的成员(我们在同一个会话中),Hibernate 不会发出另一个 DB 查询并从会话(第一级)缓存中获取对象. 问题是这是未初始化的 Bar 类的代理,尝试调用此对象 getId() 将返回 0,而 getTitle() 将返回 null。我们当前的解决方案非常难看,它检查从 get 返回的对象是否是代理这里是代码(形成一个通用的 DAO 实现):
有没有更好的方法来做到这一点,在 Hibernate 论坛中找不到解决方案,在 Hibernate 的 JIRA 中也没有找到问题。
注意:我们不能只使用 foo.getBar() (它将正确初始化代理)来获取 Bar 类对象,因为获取 Bar 对象的 session.get 操作不知道(或不关心)Bar class 也是刚刚获取的 Foo 对象的惰性成员。
java - 将 EJB 2.x BMP 实体 bean 与 Hibernate 3.x 混合
我有一个使用 EJB 2.x 实体 bean (BMP) 的大型应用程序。众所周知,这是一种可怕的持久性策略(如有必要,我可以详细说明)。
我想开始迁移这个应用程序以使用更具表现力、透明和非侵入性的持久性策略,并且鉴于我公司以前的经验,Hibernate 3.x 是显而易见的选择。
迁移到 Hibernate 需要一段时间,因为应用程序中有超过 100 个表使用实体 bean。因此,我正在研究一种分阶段的方法,其中两种持久性策略并行运行,如果可能的话,最好同时在同一张表上运行。
我的问题是,将这两种持久性策略结合起来有哪些陷阱(如果有的话)?他们会互相妨碍吗?
java - Hibernate 使用空值映射复合键
使用 Hibernate,您是否可以创建一个复合 ID,其中您映射到该 ID 的列之一可以具有空值?
这是为了处理具有唯一键的遗留表,该唯一键可以具有空值但没有主键。
我意识到我可以在表中添加一个新的主键列,但我想知道是否有任何方法可以避免这样做。
java - Hibernate(JPA)如何进行急切查询,加载所有子对象
关于我之前的问题,我想确保加载所有子对象,因为我有多个线程可能需要访问数据(从而避免延迟加载异常)。我知道这样做的方法是在查询(EJB QL)中使用“fetch”关键字。像这样:
假设一个模型有一个Order
类,其中有一组OrderLines
。
我的问题是似乎需要“distinct”关键字,否则我似乎会得到一个Order
for each OrderLine
。我在做正确的事吗?
也许更重要的是,有没有办法拉入所有子对象,无论多深?我们有大约 10-15 个类,对于服务器,我们需要加载所有内容......我避免使用FetchType.EAGER
,因为这意味着它总是渴望,特别是 Web 前端加载所有内容 - 但也许这是要走的路 - 是你做什么?我似乎记得我们之前尝试过这个然后得到非常慢的网页 - 但这也许意味着我们应该使用二级缓存?