问题标签 [many-to-one]
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.
nhibernate - NHibernate 多对一关系仅删除父级
我在对象Product
和Supplier
. 我需要能够在Supplier
不删除Product
属于它的 s 的情况下删除。
这是类的简化版本:
我正在使用 FluentNHibernate,但这里是它产生的映射:
这会在 Products 表上创建一个外键,因此当我尝试对供应商进行直接删除时,我会收到外键约束错误。我尝试将级联更改为“全部”,希望它可能只删除关系,但它删除了所有产品及其其他关联对象。
我现在能看到解决这个问题的唯一方法是迭代供应商的产品集合并将供应商属性设置为空。有没有办法通过映射实现这种行为?
hibernate - Hibernate - 子集合标识符在更新中更改
当我尝试更新对象 RFQ 时,Hibernate 倾向于更新其子集合 BQMaster 并尝试设置和更新 BQMaster 的标识符,这通常是不允许的。
postgre 日志文件:
2009-05-22 11:16:53 错误:重复键违反唯一约束“bq_masters_pkey”
2009-05-22 11:16:53 声明:更新 bq_masters 设置 rfq_id=$1,id=$2 where id= 3 美元
控制台错误:
原因:java.sql.BatchUpdateException:批处理条目 0更新 bq_masters set rf q_id=2, id=0 where id=49449 was aborted。调用 getNextException 查看原因。在org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutor Impl.java:1257)在 org.postgresql.core.v3.QueryExecutorImpl
的 org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handle Error(AbstractJdbc2Statement.java:2392) org.hibernate.jdbc.BatchingBatcher.doExecuteBatch( BatchingBatcher.java:58)的org.hibernate.execute( QueryExecutorImpl.ja va:334) .jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
... 32 更多
当它试图更新 bq_masters 的 id 时,这似乎很奇怪。它应该保留 id 并仅更新其他字段。
休眠映射:
数据库结构供参考:
我尝试在 RFQ 一对多映射中添加 inverse="true" 但无济于事,因为它不会更新相应 RFQ 对象的 BQMasters。
有人对解决这个问题有任何线索吗?提前致谢。
hibernate - 如何通过 hql 延迟加载一对一的组合
如果实体 A 与实体 B 具有双向一对一或零对一映射。
映射如下:
和
当我为 EntityA 执行 hql 查询(或者更确切地说是命名的 hql 查询)时,hibernate 会急切地使用单独的 select 语句加载 EntityA#propertyB。
我的问题是,如果我的 hql 返回 1000 个 EntityA(都有各自的 EntityB),hibernate 将执行 n+1 个查询(第一个查询是 EntityA 返回 1000 个结果,而 n 个查询将来自 EntityA# propertyB 选择延迟加载)。
但是,我不需要那些 EntityA#propertyB,这就是为什么我想延迟加载它们(不让休眠使用单独的 sql 查询)。
那可能吗?如果是,我该怎么做?
谢谢,弗兰兹
hibernate - 休眠多对一的hql查询,当内部连接获取属性未关联时
我在 hbm.xml 中设置了这样的多对一关联:
我正在使用仪器来进行真正的延迟加载。
但是,当我使用对另一个表的内部连接提取运行 hql 查询时,应该包含作为另一个表的值的对象的属性保留为空。即使我可以看到另一个表的值对象是由休眠创建的。
有人对这个问题有任何见解吗?
更新:
nhibernate - NHibernate 多对一加载替代方案
我有一个父/子对象/映射如下:
我不想Parent Parent
在 Child 中使用该属性;我想用int ParentId
. 我将如何进行映射?
nhibernate - 针对特定场景(一对多/一对一)正确的 NHibernate 映射
我有以下结构:
被翻译成以下
现在我想在历史记录中添加一个日期,创建以下类结构:
并保持数据库模式几乎不变
我想映射Read
到UserHistory
,问题是:
- 我应该
id
在映射中使用Read
什么?UserHistory
主键是(UserId, BookId)
. 我需要一个id
NH 才能工作吗? UserHistory -> Book
似乎是一个案例one-to-one
。在这种情况下如何指定BookId
列名UserHistory
?我没有看到列属性one-to-one
(我有理由明确列名)。
nhibernate - NHibernate:将单列从多对一映射到原始类型
我有以下映射:
现在,我真的不想在域中为角色创建一个单独的类,我只需要角色名称。但是,在 DB Roles 中仍应规范化为单独的 table Role (Id, Name)
。
如何映射它以便人们使用以下 PersonRole 类?
更新:增加了赏金,这似乎是一个不仅对我有用的问题。
nhibernate - NHibernate: SaveOrUpdate by
是否有一种简单的方法可以根据是否已经存在具有相同的实体来使 NH INSERT 或 UPDATE 实体<natural-id />
?
使用 . 将实体映射到另一个(根)实体<many-to-one cascade="save-update" />
。
nhibernate - NHibernate 多对一次级联
我在 Invoice 和 InvoiceDetail 之间创建了如下所示的映射。尝试更新发票时,我也注意到用户的更新语句。当我们设置了 cascade =“none” 时,为什么要更新“用户”?
谢谢
阿努拉格
java - 使用 JPA 将 db 导入的国家/地区映射到地址实体
我运行了一些 DDL 脚本来在我的数据库中设置一个完整的国家/地区表。国家表的主键列包含每个国家对应的 ISO 代码。
在我的 JPA 项目中,我有一个具有嵌入式地址实体的用户实体,并且该地址实体具有对国家/地区的引用。User 和 Address 之间的关系对我来说似乎没有问题,但是 Address 和 Country 之间的关系。我试图将其映射为多对一关系,因为许多地址可以共享一个国家。
问题是:我用 Id 注释了 Country 类的 iso 成员变量 -> 现在,JPA/Hibernate 抱怨没有手动设置国家的 id。但是在这种情况下,已经给出并设置了 id,因为我导入了一次数据并且 ISO 代码是唯一的,并且通过 db 模式表示声明为主键。在这种特殊情况下,不需要在国家/地区表中更新或插入 - 信息应该是只读的!
知道该怎么做,所以我可以使用我的国家表而不改变?