diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryMarshaller.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryMarshaller.java
index c5aaec025..2174c8bd5 100644
--- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryMarshaller.java
+++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryMarshaller.java
@@ -21,6 +21,7 @@ package org.libreccm.categorization;
import org.libreccm.portation.AbstractMarshaller;
import javax.inject.Inject;
+import javax.transaction.Transactional;
/**
* @author Tobias Osmers
@@ -37,6 +38,7 @@ public class GroupMarshaller extends AbstractMarshaller {
}
@Override
+ @Transactional(Transactional.TxType.REQUIRED)
protected void insertIntoDb(Group portableObject) {
groupRepository.save(portableObject);
}
diff --git a/ccm-core/src/main/java/org/libreccm/security/GroupMembershipMarshaller.java b/ccm-core/src/main/java/org/libreccm/security/GroupMembershipMarshaller.java
index a8b8dd026..7c98a7335 100644
--- a/ccm-core/src/main/java/org/libreccm/security/GroupMembershipMarshaller.java
+++ b/ccm-core/src/main/java/org/libreccm/security/GroupMembershipMarshaller.java
@@ -22,6 +22,7 @@ import org.libreccm.portation.AbstractMarshaller;
import javax.inject.Inject;
import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
/**
* @author Tobias Osmers
@@ -38,6 +39,7 @@ public class PermissionMarshaller extends AbstractMarshaller {
}
@Override
+ @Transactional(Transactional.TxType.REQUIRED)
protected void insertIntoDb(Permission portableObject) {
if (portableObject.getPermissionId() == 0) {
entityManager.persist(portableObject);
diff --git a/ccm-core/src/main/java/org/libreccm/security/RoleMarshaller.java b/ccm-core/src/main/java/org/libreccm/security/RoleMarshaller.java
index 024302276..40423ee88 100644
--- a/ccm-core/src/main/java/org/libreccm/security/RoleMarshaller.java
+++ b/ccm-core/src/main/java/org/libreccm/security/RoleMarshaller.java
@@ -21,6 +21,7 @@ package org.libreccm.security;
import org.libreccm.portation.AbstractMarshaller;
import javax.inject.Inject;
+import javax.transaction.Transactional;
/**
* @author Tobias Osmers
@@ -38,6 +39,7 @@ public class RoleMembershipMarshaller extends AbstractMarshaller
}
@Override
+ @Transactional(Transactional.TxType.REQUIRED)
protected void insertIntoDb(RoleMembership portableObject) {
if (portableObject.getMembershipId() == 0) {
entityManager.persist(portableObject);
diff --git a/ccm-core/src/main/java/org/libreccm/security/UserMarshaller.java b/ccm-core/src/main/java/org/libreccm/security/UserMarshaller.java
index 51b93cc16..450553d95 100644
--- a/ccm-core/src/main/java/org/libreccm/security/UserMarshaller.java
+++ b/ccm-core/src/main/java/org/libreccm/security/UserMarshaller.java
@@ -21,6 +21,7 @@ package org.libreccm.security;
import org.libreccm.portation.AbstractMarshaller;
import javax.inject.Inject;
+import javax.transaction.Transactional;
/**
* @author Tobias Osmers
@@ -37,6 +38,7 @@ public class AssignableTaskMarshaller extends AbstractMarshaller
}
@Override
+ @Transactional(Transactional.TxType.REQUIRED)
protected void insertIntoDb(AssignableTask portableObject) {
assignableTaskRepository.save(portableObject);
}
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/Task.java b/ccm-core/src/main/java/org/libreccm/workflow/Task.java
index 8303f7c31..7ff527165 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/Task.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/Task.java
@@ -18,20 +18,13 @@
*/
package org.libreccm.workflow;
-import static org.libreccm.core.CoreConstants.*;
-
import com.fasterxml.jackson.annotation.JsonBackReference;
-import com.fasterxml.jackson.annotation.JsonManagedReference;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.libreccm.core.CcmObject;
import org.libreccm.core.Identifiable;
import org.libreccm.l10n.LocalizedString;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
@@ -52,6 +45,13 @@ import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/**
* A task is part of a workflow and represents a specific step in the creation
@@ -166,7 +166,9 @@ public class Task implements Identifiable, Serializable {
* Tasks which the depends of this task.
*/
@ManyToMany(mappedBy = "dependsOn")
- @JsonManagedReference(value = "dependent-dependson")
+ @JsonIdentityInfo(
+ generator = ObjectIdGenerators.PropertyGenerator.class,
+ property = "taskId")
private List dependentTasks;
/**
@@ -179,7 +181,9 @@ public class Task implements Identifiable, Serializable {
@JoinColumn(name = "DEPENDS_ON_TASK_ID")},
inverseJoinColumns = {
@JoinColumn(name = "DEPENDENT_TASK_ID")})
- @JsonBackReference(value = "dependent-dependson")
+ @JsonIdentityInfo(
+ generator = ObjectIdGenerators.PropertyGenerator.class,
+ property = "taskId")
private List dependsOn;
/**
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java
index 5a39d987b..1df7c75dd 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskAssignmentMarshaller.java
@@ -22,6 +22,7 @@ import org.libreccm.portation.AbstractMarshaller;
import javax.inject.Inject;
import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
/**
* @author Tobias Osmers
@@ -37,6 +38,7 @@ public class WorkflowMarshaller extends AbstractMarshaller {
}
@Override
+ @Transactional(Transactional.TxType.REQUIRED)
protected void insertIntoDb(Workflow portableObject) {
workflowRepository.save(portableObject);
}
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateMarshaller.java b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateMarshaller.java
index 1cae65498..49f9119fe 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateMarshaller.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateMarshaller.java
@@ -21,6 +21,7 @@ package org.libreccm.workflow;
import org.libreccm.portation.AbstractMarshaller;
import javax.inject.Inject;
+import javax.transaction.Transactional;
/**
* @author