保存父实体后立即获取子实体的 ID
有一个父实体,其中包含子实体的集合 (cascale=all),每个子实体都有孙实体的集合 (cascale=all)。
给定一个会话,我创建一个孙子并将其添加到父级中子级的子级中,并且由于我还修改了层次结构内的一些其他对象,因此我在根(父级)上调用 Session.SaveOrUpdate。
之后我需要孙子实体的 id,但它是 0。
现在,如果我另外对孙子实体调用 Session.SaveOrUpdate,那么我可以获得其新 id。这是正常行为吗?将级联设置为全部后,我本以为可以在保存父项时获取 id。
有什么启示吗?
There is a parent entity that has a collection of child entities (cascale=all) and each child entity has a collection of grand-child entities (cascale=all).
Given a session, I create a grand-child and add it to the children of a child in the parent and since I also modified some other objects inside the hierarchy, I call Session.SaveOrUpdate on the root (parent).
After this I need the id of the grand-child entity but it is 0.
Now if I additionally call Session.SaveOrUpdate on the grand-child too, then I can get its new id. Is it normal behavior? With the cascades set to all, I would have thought that I could get the id when saving the parent.
Any enlightments?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
SaveOrUpdate 在已经持久的接口上调用时不执行任何操作。
您可以调用
session.Persist(parent)
(这将级联),也可以像您已经在做的那样调用session.Save(grandChild)
(这没有任何问题,虽然我想知道你需要这个 ID 做什么)SaveOrUpdate, when called on an already-persistent interface does nothing.
You can either call
session.Persist(parent)
, which will cascade, or callsession.Save(grandChild)
as you're already doing (there's nothing wrong with this, although I wonder what you need that Id for)