JPA: Delete child from parent without merge on parent in bi-directional relationship
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I am working with the following parent-child-relationship:
@Entity
@Audited
public class Parent implements Serializable
@Id
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Child> children;
// Empty default constructor
// Getters and setters
@Entity
@Audited
public class Child implements Serializable
@Id
private Long id;
@ManyToOne
@JoinColumn(nullable = false)
private Parent parent;
// Empty default constructor
// Getters and setters
The use-case I am working on foresees that I am removing a child from its parent, but at this point in time, I am explicitly not supposed to merge the parent entity. Hence, I tried as follows:
Child childFromDb = entityManager.find(Child.class, child.getId());
childFromDb.setParent(null);
entityManager.remove();
This results in an java.sql.BatchUpdateException: (conn:1) Column 'parent_id' cannot be null
thrown by Hibernate.
Setting @JoinColumn(nullable = true)
resolves this issue but the database schema uses DEFAULT NULL
on the column which is not desired as no child
objects may exist without a related parent
. As a plus, I cannot use a delete
statement in HQL, JPQL, native SQL or a CriteriaDelete as the tables are audited using Envers (5.1.4). I remember that Envers does not support bulk statements (insert, update, delete, https://hibernate.atlassian.net/browse/HHH-3554) or CriteraUpdate/CriteraDelete (https://hibernate.atlassian.net/browse/HHH-10318).
How can I remove just the child
without merging the parent
, keeping the NOT NULL
column constraint and not using a different deletion option? Is this even possible?
hibernate hibernate-envers jpa-2.1
add a comment |
I am working with the following parent-child-relationship:
@Entity
@Audited
public class Parent implements Serializable
@Id
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Child> children;
// Empty default constructor
// Getters and setters
@Entity
@Audited
public class Child implements Serializable
@Id
private Long id;
@ManyToOne
@JoinColumn(nullable = false)
private Parent parent;
// Empty default constructor
// Getters and setters
The use-case I am working on foresees that I am removing a child from its parent, but at this point in time, I am explicitly not supposed to merge the parent entity. Hence, I tried as follows:
Child childFromDb = entityManager.find(Child.class, child.getId());
childFromDb.setParent(null);
entityManager.remove();
This results in an java.sql.BatchUpdateException: (conn:1) Column 'parent_id' cannot be null
thrown by Hibernate.
Setting @JoinColumn(nullable = true)
resolves this issue but the database schema uses DEFAULT NULL
on the column which is not desired as no child
objects may exist without a related parent
. As a plus, I cannot use a delete
statement in HQL, JPQL, native SQL or a CriteriaDelete as the tables are audited using Envers (5.1.4). I remember that Envers does not support bulk statements (insert, update, delete, https://hibernate.atlassian.net/browse/HHH-3554) or CriteraUpdate/CriteraDelete (https://hibernate.atlassian.net/browse/HHH-10318).
How can I remove just the child
without merging the parent
, keeping the NOT NULL
column constraint and not using a different deletion option? Is this even possible?
hibernate hibernate-envers jpa-2.1
There must be something else going on in your code as the snippet you proposed on setting the parent-property tonull
on theChild
and then calling theremove
method to remove theChild
instance works for 5.4. Can you describe the transaction boundaries and what other objects are potentially loaded in the persistence-context when you're trying to perform this operation?
– Naros
Nov 20 '18 at 15:09
add a comment |
I am working with the following parent-child-relationship:
@Entity
@Audited
public class Parent implements Serializable
@Id
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Child> children;
// Empty default constructor
// Getters and setters
@Entity
@Audited
public class Child implements Serializable
@Id
private Long id;
@ManyToOne
@JoinColumn(nullable = false)
private Parent parent;
// Empty default constructor
// Getters and setters
The use-case I am working on foresees that I am removing a child from its parent, but at this point in time, I am explicitly not supposed to merge the parent entity. Hence, I tried as follows:
Child childFromDb = entityManager.find(Child.class, child.getId());
childFromDb.setParent(null);
entityManager.remove();
This results in an java.sql.BatchUpdateException: (conn:1) Column 'parent_id' cannot be null
thrown by Hibernate.
Setting @JoinColumn(nullable = true)
resolves this issue but the database schema uses DEFAULT NULL
on the column which is not desired as no child
objects may exist without a related parent
. As a plus, I cannot use a delete
statement in HQL, JPQL, native SQL or a CriteriaDelete as the tables are audited using Envers (5.1.4). I remember that Envers does not support bulk statements (insert, update, delete, https://hibernate.atlassian.net/browse/HHH-3554) or CriteraUpdate/CriteraDelete (https://hibernate.atlassian.net/browse/HHH-10318).
How can I remove just the child
without merging the parent
, keeping the NOT NULL
column constraint and not using a different deletion option? Is this even possible?
hibernate hibernate-envers jpa-2.1
I am working with the following parent-child-relationship:
@Entity
@Audited
public class Parent implements Serializable
@Id
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Child> children;
// Empty default constructor
// Getters and setters
@Entity
@Audited
public class Child implements Serializable
@Id
private Long id;
@ManyToOne
@JoinColumn(nullable = false)
private Parent parent;
// Empty default constructor
// Getters and setters
The use-case I am working on foresees that I am removing a child from its parent, but at this point in time, I am explicitly not supposed to merge the parent entity. Hence, I tried as follows:
Child childFromDb = entityManager.find(Child.class, child.getId());
childFromDb.setParent(null);
entityManager.remove();
This results in an java.sql.BatchUpdateException: (conn:1) Column 'parent_id' cannot be null
thrown by Hibernate.
Setting @JoinColumn(nullable = true)
resolves this issue but the database schema uses DEFAULT NULL
on the column which is not desired as no child
objects may exist without a related parent
. As a plus, I cannot use a delete
statement in HQL, JPQL, native SQL or a CriteriaDelete as the tables are audited using Envers (5.1.4). I remember that Envers does not support bulk statements (insert, update, delete, https://hibernate.atlassian.net/browse/HHH-3554) or CriteraUpdate/CriteraDelete (https://hibernate.atlassian.net/browse/HHH-10318).
How can I remove just the child
without merging the parent
, keeping the NOT NULL
column constraint and not using a different deletion option? Is this even possible?
hibernate hibernate-envers jpa-2.1
hibernate hibernate-envers jpa-2.1
asked Nov 16 '18 at 11:42
fatdevelopsfatdevelops
1581415
1581415
There must be something else going on in your code as the snippet you proposed on setting the parent-property tonull
on theChild
and then calling theremove
method to remove theChild
instance works for 5.4. Can you describe the transaction boundaries and what other objects are potentially loaded in the persistence-context when you're trying to perform this operation?
– Naros
Nov 20 '18 at 15:09
add a comment |
There must be something else going on in your code as the snippet you proposed on setting the parent-property tonull
on theChild
and then calling theremove
method to remove theChild
instance works for 5.4. Can you describe the transaction boundaries and what other objects are potentially loaded in the persistence-context when you're trying to perform this operation?
– Naros
Nov 20 '18 at 15:09
There must be something else going on in your code as the snippet you proposed on setting the parent-property to
null
on the Child
and then calling the remove
method to remove the Child
instance works for 5.4. Can you describe the transaction boundaries and what other objects are potentially loaded in the persistence-context when you're trying to perform this operation?– Naros
Nov 20 '18 at 15:09
There must be something else going on in your code as the snippet you proposed on setting the parent-property to
null
on the Child
and then calling the remove
method to remove the Child
instance works for 5.4. Can you describe the transaction boundaries and what other objects are potentially loaded in the persistence-context when you're trying to perform this operation?– Naros
Nov 20 '18 at 15:09
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53337194%2fjpa-delete-child-from-parent-without-merge-on-parent-in-bi-directional-relation%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53337194%2fjpa-delete-child-from-parent-without-merge-on-parent-in-bi-directional-relation%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
There must be something else going on in your code as the snippet you proposed on setting the parent-property to
null
on theChild
and then calling theremove
method to remove theChild
instance works for 5.4. Can you describe the transaction boundaries and what other objects are potentially loaded in the persistence-context when you're trying to perform this operation?– Naros
Nov 20 '18 at 15:09