问题标签 [hibernate-mapping]
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.
hibernate - 在 Hibernate 中映射本地化字符串 - 任何最佳实践?
我正在编写一个应用程序,其中所有字符串属性都必须本地化,即它们必须为每个可用的区域设置存储不同的值。一个快速的解决方案是使用 Map,它可以在 Hibernate 中轻松映射,但对 Java 程序员来说并不好:
因此,我实现了一个 LocalString 对象,它可以为不同的语言环境保存不同的字符串:
域对象变为
如何最好地使用 Hibernate 注释映射这些对象?
我认为最好的映射将使用 LocalString 作为组件来完成:
...
到目前为止一切都很好:hbm2ddl ant 任务创建了两个表,一个“Products”表和一个包含键和值列的“Products_localStrings”表。当我为第二个属性添加吸气剂时,一切都会中断:
第二个属性未显示在架构中。我尝试使用@AttributesOverride 标记为两列定义不同的名称,但生成的架构不正确:
在生成的架构中,键列已经消失,主键使用“描述”,这是不正确的:
有任何解决这个问题的方法吗?
如果没有嵌入式组件,使用 LocalString 作为实体,我会更好吗?
有什么替代设计吗?
谢谢你。
编辑
我尝试使用 xml 映射并设法获得了正确的架构,但是由于 hibernate 生成两个插入而不是一个,因此插入失败并违反了主键
架构是
日志:
如何告诉 hibernate 只生成一个插入,如下所示?
编辑于 2011.Apr.05
我一直在使用 Map 解决方案(用@ElementCollection 注释),直到我偶然发现两个问题:
- 当前的 Criteria API 不适用于嵌入式集合: http: //opensource.atlassian.com/projects/hibernate/browse/HHH-3646
- 当前的 Hibernate Search (Lucene) API 也不适用于嵌入式集合: http: //opensource.atlassian.com/projects/hibernate/browse/HSEARCH-566
我知道有很多变通方法,例如使用 HQL 代替 Criteria 并定义您自己的 FieldBridge 来处理 Lucene 中的 Map,但我不喜欢变通方法:它们一直有效,直到下一个问题出现。所以我现在遵循这种方法:
我定义了一个包含语言环境和值的类“LocalString”(语言环境实际上是 ISO3 代码):
然后我为每个要本地化的属性定义一个 LocalString 的子类,它是空的:
现在我可以在我的 Product 对象中使用它:
使用这种方法,我必须为需要本地化的每个属性编写一个空类,这是为该属性创建唯一表所必需的。好处是我可以不受限制地使用 Criteria 和 Search。
hibernate - 在 Hibernate 中批量插入组件集合?
我有如下所列的映射。
当我更新一个分离的类别项目(它不包含任何来自 dto 转换器的 Hibernate 类)时,我注意到 Hibernate 将首先删除所有雇主工资实例(集合链接),然后插入所有雇主工资条目 ONE-BY -一 :(...
我知道它必须删除然后插入所有条目,因为它已完全分离。
但是,我不明白的是,为什么 Hibernate 不通过批量插入插入所有条目?.. 那就是:在一个 SQL 语句中插入所有雇主工资条目?
如何告诉 Hibernate 使用批量插入?(如果可能的话)。我尝试使用以下值,但没有发现任何区别:
我的映射片段:
hibernate - Hibernate不插入重新附加的集合?(漏洞?)
版本:3.6.0.final
我有以下情况:具有集合的实体,包含值类型对象,级联完全启用。
1)我删除,集合并将其存储到数据库。然后加载它以检查该集合是否确实被删除。2)然后我添加删除的集合并再次存储实体。然后我再次加载它以检查结果并注意到集合是空的,它不应该:(...我做错了什么还是这是一个错误?当我在 2) 中使用干净创建的集合时,不存在 Hibernate 对象,它工作正常..,即:集合正确存储在数据库中。
在代码中,我的映射:
编码:
如果我创建一个包含一些条目的新 Set 并存储它,一切正常,但是当我存储包含 Hibernate 对象的旧历史记录(如 PersistSet)时,它不会存储在数据库中...... Stranggeee...... . 这是预期的行为吗?...我闻起来更像是虫子,或者我在这里遗漏了一些东西...
如果我调试 Hibernate 代码,则集合条目永远不会在 Collections.prepareCollectionForUpdate() 方法中标记为已更新/重新创建,因为由于某种原因,loadedPersister 和 currentPersister 是相同的......
有人知道吗?
hibernate - 在 HQL 查询方面需要帮助
我有一个简单的类,称为Person,如下所示:
每个PersonState的定义如下:
State是一个简单的类,只包含一个id和name,我已经配置了所有映射文件并且可以正常工作。
我想获取最后一个PersonState(基于它的date)具有 id = 5 的State的那些Persons(例如),那么 HQL 查询是什么样的?谢谢!
java - org.springframework.orm.hibernate3.HibernateQueryException - HibernateTemplate
我在使用 HibernateTemplate 时遇到问题,我不知道我哪里出错了。我正在使用 Hibernate3 和 Tomcat6。在我的 DAO 中,我有尝试使用字符串查询数据库的函数,它们似乎工作正常。像这样
然而,当我尝试使用整数进行查询时。像:
我收到此错误:
p>我的实体似乎有必要的注释。由于它适用于第一个功能,我不明白为什么它不适用于第二个功能。
hibernate-mapping - 如何将“insert='false' update='false'”映射到也用于一对多 FK 的复合 ID 键属性上?
我正在使用现有数据库模式处理遗留代码库。现有代码使用 SQL 和 PL/SQL 在 DB 上执行查询。我们的任务是使项目的一小部分数据库引擎不可知(起初,最终改变一切)。我们选择使用Hibernate 3.3.2.GA和“*.hbm.xml”映射文件(而不是注解)。不幸的是,更改现有模式是不可行的,因为我们无法回归任何遗留功能。
我遇到的问题是,当我尝试映射单向、一对多关系时,FK也是复合 PK 的一部分。这是类和映射文件...
公司实体.java
公司名称实体.java
公司名称实体.hbm.xml
此代码适用于具有名称的公司的 SELECT 和 INSERT。当我尝试更新和现有记录时遇到问题。我收到了 BatchUpdateException 并且在查看了 SQL 日志后,我看到 Hibernate 正在尝试做一些愚蠢的事情......
Hibernate 试图在更新子记录之前解除关联。问题是该字段是 PK 的一部分并且不可为空。我发现让 Hibernate 不这样做的快速解决方案是将“not-null='true'”添加到父映射中的“key”元素。所以现在可能映射看起来像这样......
公司名称实体.hbm.xml
这个映射给出了例外......
我现在的问题是我试图将这些属性添加到 key-property 元素,但 DTD 不支持。我也尝试将其更改为键多对一元素,但这也不起作用。所以...
如何将“insert='false' update='false'”映射到也用于一对多 FK 的复合 ID 键属性上?
java - java,hibernate:使用查询映射属性
我有一个具有属性“数量”的实体,该值不是表字段,而是使用 hql 查询动态计算的。
那么,是否可以在我的实体中添加这个值并在我加载我的实体时让休眠计算它?
java - 使用瞬态对象创建持久对象
我有 2 个这样的映射:
这些是类:
我处于必须处理长期过渡并执行以下操作的情况:
这发生在另一层(这里无权访问会话):
在保存父对象之前是否有任何方法加载/获取持久子对象,或者是否有其他方法可以保存子对象而不更改信息并将其全部刷新?我没有使用 JPA。对不起,如果我大错特错。
谢谢你。
hibernate - Seam休眠删除孤儿问题
我使用实体 Employee 并在其中定义了 UserMaster 列表
在我调用的方法中
在这里我明确地清除以前的子集合并添加新的子对象
但是删除孤儿在这里不起作用..只有插入查询正在运行请帮助
拥有实体不再引用具有 cascade="all-delete-orphan" 的集合
消息显示在控制台中
hibernate - 有没有办法将 Hibernate 映射到可能存在或不存在的列?
我有一种情况,表上的列可能存在也可能不存在。长话短说,我们有一个可选功能,如果实施,它将在表格上附加一列。如果客户选择不拥有该功能,他们将不会拥有该列。
我正在尝试在我的 DAO 中为它定义一个属性,希望如果该列不存在,Hibernate 不会爆炸。也许通过将值设置为null
. 但是,Hibernate 正在抛出“无效标识符”异常。
有谁知道你能不能做到这一点?有一个列映射,如果该列存在 Hibernate 会填充它,但如果它不存在,一切都很好,只是null
?
非常感谢。