问题标签 [hibernate-onetomany]
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 - OneToMany /可为空关系的休眠性能问题
我们使用@OneToMany
Parent->Child->Child->Child DB 关系:
我们有一个包含大量数据(100K 插入)的场景,其中插入时性能非常糟糕(实际上超时)。但是,使用少量数据(1K 插入)我们就可以了。
因此,我无缘无故地删除nullable = false
并更改了子表上的数据库外键以允许空值,并且性能非常好。谁能解释一下?
更新:打开调试..nullable = false
似乎存在一个巨大的瓶颈,为子表生成 id。我们超时等待 id 生成,在日志中一遍又一遍:
我们甚至从未将数据插入数据库。我们只是停留在 id gen 上。目前我们配置 Hibernate 通过查看当前子表中的最大 id 值来生成 ID:
在此之前,我们使用 DB 序列并看到了同样的问题。
当我们省略 时nullable = false
,我们确实看到了这些 ID gen 语句(其中 108K),但它们在 25 秒内完成。那么为什么这些陈述(字面意思)会永远持续下去nullable = false
?
hibernate - 休眠映射,在未映射的类上
我有 2 张桌子... Challenge 和 ChallengeYear,ChallengeYear 只是创建一个挑战年份列表。
我只想让 Challenge 成为一个实体,其中包含 List 年份的列表。这可能吗?
我已经与@JoinColumn 和@OneToMany 一起查看了@SecondaryTable,但是它们都不能解决问题,或者我忽略了一些东西。
有人能帮我吗?
问候,扬
grails - 为什么当我在 grails 上删除一对多关系的父级时,会在子级上调用 beforeInsert 事件?
我有一对多的关系,当我尝试删除一个有多个孩子的父母时,第一个孩子会调用 berforeInsert 事件。在此事件中,我有一些代码,我的意思是在插入孩子之前调用,而不是在我删除父母时调用!关于什么可能是错的任何想法?
实体:
java - 因休眠而丢失 - OneToMany 导致多次被拉回
我有这个数据库设计:
和这个休眠标记:
和
我已经为该报告插入了报告和 4 个属性。现在当我执行这个:
我返回报告 4 次,而不是只有一次,其中包含 4 个属性的 Map。老实说,我不擅长 Hibernate,更喜欢直接 SQL,但我必须学习,但我看不出它是什么那是错的.....?
有什么建议么?
java - 一对多关系中的 CascadeType 问题
我有两个彼此具有单向一对多关系的类。
我想将带有一组 FieldMapper 的 Offer 存储到数据库中。当我在 OneToMany 中使用 CascadeType.ALL 时,出现此错误:
当我将 CascadeType 更改为其他内容时,出现此错误:
这是我保存优惠的地方:
而且我不在其他地方使用会话。
在线抛出解释的tx.commit();
异常。
谢谢你的帮助。
hibernate - Hibernate:OneToMany 映射不基于 PK?
我有 2 个实体/表。
一个是适当的实体,我们称之为data
。它有许多包含所谓“多语言代码”的字段。
第二个表code
包含多语言值本身。
这是一些示例数据:
我想将数据实体中的属性大洲、国家等映射为地图,如下所示:
这样我就可以像这样阅读正确语言的文本:
我还需要能够使用用户的语言对这些“代码”的值进行文本搜索。(例如,在法语中获取 country='suisse' 的所有数据!)
那么,是否可以OneToMany
使用不是当前实体主键的键字段来映射集合?我需要我的大洲集合“代码表中的所有记录,其中代码 = 我的continentCode
财产的价值”。或者也许有更合适的方式来表示这种关系?
注意:不幸的是,我无法更改 SQL 架构...
java - Grails AddTo 在 for 循环中
我面临一个问题,因为我是 grails 的新手,我正在做一个阅读故事的网站,我现在的目标是将故事的内容保存到几个页面中以获取列表,然后轻松对其进行分页..所以我做了以下。
在域中,我创建了两个域,一个称为故事,并具有以下内容:
}
并且当然有名为 page 的域有这个:
}
控制器保存方法是这样的:
我知道它看起来很乱,但它是一个原型......无论如何......问题是我正在等待“storyInstance.addToPages(pages)”行在每次条件为时向页面集添加页面实例是的..但是实际上发生了什么,它只给了我最后一个 page_idx 的最后一个实例,而我认为它应该一个接一个地保存页面,这样我就可以获得每个故事的页面列表..
为什么会发生这种情况,有没有比我做的更简单的方法。
我在这里等待任何值得赞赏的帮助
java - Hibernate:我如何编写 HQL 以获取没有记录的实体记录以识别其关系
我将休眠对象定义为
我现在想获取所有没有任何标签的 SomeText 对象。我编写了以下 HQL,但它不起作用。
我该怎么做才能得到这些记录。在 SQL 世界中,我会编写一个查询,该查询将从 text_tag_reln 表中获取所有不同的 textId,并获取该集合中不存在的所有 SomeText id。我怎样才能在 HQL 中做到这一点?
hibernate - 休眠一对多
根据休眠文档:
要将双向一对多映射,将一对多作为拥有方,您必须删除 mappedBy 元素并将多对一 @JoinColumn 设置为可插入且可更新为 false。此解决方案未优化,会产生一些额外的 UPDATE 语句。
我的问题是:
- 这样的设置有什么好处。为什么不创建 Manytonone 方作为拥有方
- 为什么在这个设置中需要这两个值:insertable=false, updatable=false
java - Hibernate:与多键表的键之一连接
我有一个表类别和一个表 TranslatableText。类别是这样的
在我的 Category 实体中,我定义了一个映射:
但是当它执行时,它会尝试访问 TranslatableDescriptionId,而不是 id。即使 TranslatableText 实体已定义
选择了错误名称的查询:
选择 translatab0_.TranslatableDescriptionId 作为 Translat4_13_1_,translatab0_.id 作为 id1_,translatab0_.lang 作为 Lang1_,translatab0_.id 作为 id22_0_,translatab0_.lang 作为 Lang22_0_,translatab0_.text 作为 Text22_0_ from tblTranslateableText translatab0_ where translatab0_.TranslatableDescriptionId in ('126' 119'、'103'、'116'、'121'、'107'、'113'、'101'、'109'、'105'、'123'、'106'、'125'、'124' , '114')
如果我将映射@JoinColumn 更改为读取
加载我的应用程序时出现以下错误:
org.hibernate.MappingException:无法在 org.hibernate.mapping.Table(Category) 及其相关的超级表和辅助表中找到具有逻辑名称的列:id
为了更好地衡量,我还尝试了:
这给了我错误:
org.hibernate.MappingException:无法在 org.hibernate.mapping.Table(Category) 及其相关的超级表和辅助表中找到具有逻辑名称的列:TranslatableDescriptionId
对我应该做什么有什么建议吗?我真的希望 Category 的 translateableText 包含其描述的所有翻译,所以我真的很想加入 Category.TranslatableDescriptionId==TranslatableText.id
UPDATE1:TranslatableText 被许多实体使用,因此在其中放入 categoryId 并反转关系不是一种选择。
UPDATE2:我能够加载它说@JoinColumn(name="id")
,但这导致了 Hibernate 中的 ClassCastException,它不是以整数作为键,而是有一个包含单个整数作为键的数组。这无法制成字符串,因此无法制成正确的 SQL。所以它可能仍然不是我想要的映射
干杯
尼克