From 6307af005c5d1782c66e6c2d4529a5c61edf50e3 Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Tue, 18 Jan 2022 13:16:39 -0800 Subject: [PATCH] Optimize mindmap list query. --- .../com/wisemapping/dao/MindmapManager.java | 2 + .../wisemapping/dao/MindmapManagerImpl.java | 32 ++++--- .../java/com/wisemapping/model/Label.java | 9 +- .../java/com/wisemapping/model/Mindmap.java | 66 +++++-------- .../com/wisemapping/rest/LabelController.java | 2 +- .../wisemapping/rest/MindmapController.java | 94 ++++++++---------- .../wisemapping/rest/model/RestMindmap.java | 13 +-- .../rest/model/RestMindmapInfo.java | 96 +++++++++++-------- .../rest/model/RestMindmapList.java | 8 +- .../com/wisemapping/service/LabelService.java | 2 +- .../wisemapping/service/LabelServiceImpl.java | 2 +- .../wisemapping/service/MindmapService.java | 9 +- .../service/MindmapServiceImpl.java | 31 +++--- .../com/wisemapping/view/MindMapBean.java | 9 +- wise-webapp/src/main/resources/ehcache.xml | 3 + .../webapp/WEB-INF/classes/log4j.properties | 4 +- .../com/wisemapping/test/model/JsonTest.java | 56 ----------- .../test/rest/RestLabelITCase.java | 21 ++-- .../test/rest/RestMindmapITCase.java | 81 ++++++++++------ 19 files changed, 252 insertions(+), 288 deletions(-) delete mode 100644 wise-webapp/src/test/java/com/wisemapping/test/model/JsonTest.java diff --git a/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManager.java b/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManager.java index 6483af7f..f82c0de5 100644 --- a/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManager.java +++ b/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManager.java @@ -69,4 +69,6 @@ public interface MindmapManager { void updateCollaboration(@NotNull Collaboration collaboration); void purgeHistory(int mapId) throws IOException; + + List findMindmapByUser(User user); } diff --git a/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java b/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java index d9a17c8b..ec083353 100644 --- a/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java +++ b/wise-webapp/src/main/java/com/wisemapping/dao/MindmapManagerImpl.java @@ -21,7 +21,6 @@ package com.wisemapping.dao; import com.wisemapping.model.*; import com.wisemapping.util.ZipUtils; import org.hibernate.Criteria; -import org.hibernate.Query; import org.hibernate.criterion.Junction; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; @@ -31,6 +30,7 @@ import org.jetbrains.annotations.Nullable; import org.springframework.orm.hibernate5.HibernateTemplate; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; +import javax.persistence.Query; import java.io.IOException; import java.util.Calendar; import java.util.List; @@ -45,7 +45,7 @@ public class MindmapManagerImpl Query query = currentSession().createQuery("from com.wisemapping.model.Collaborator collaborator where email=:email"); query.setParameter("email", email); - final List collaborators = query.list(); + final List collaborators = query.getResultList(); if (collaborators != null && !collaborators.isEmpty()) { assert collaborators.size() == 1 : "More than one user with the same email!"; collaborator = collaborators.get(0); @@ -114,6 +114,16 @@ public class MindmapManagerImpl } } + @Override + public List findMindmapByUser(@NotNull User user) { + final Mindmap collaborator; + final Query query = currentSession() + .createQuery("from com.wisemapping.model.Mindmap m where m.id in (select c.mindMap.id from com.wisemapping.model.Collaboration as c where c.collaborator.id=:collabId )"); + query.setParameter("collabId", user.getId()); + + return query.getResultList(); + } + @Override public List search(MindMapCriteria criteria, int maxResult) { final Criteria hibernateCriteria = currentSession().createCriteria(Mindmap.class); @@ -156,27 +166,27 @@ public class MindmapManagerImpl @Override public List findCollaboration(final int collaboratorId) { - Query query = currentSession().createQuery("from com.wisemapping.model.Collaboration collaboration where colaborator_id=:colaboratorId"); - query.setParameter("colaboratorId", collaboratorId); - return query.list(); + Query query = currentSession().createQuery("from com.wisemapping.model.Collaboration c where c.collaborator.id=:collaboratorId"); + query.setParameter("collaboratorId", collaboratorId); + return query.getResultList(); } @Override public List findCollaboration(final CollaborationRole collaborationRole) { - Query query = currentSession().createQuery("from com.wisemapping.model.Collaboration collaboration where roleId=:roleId"); + Query query = currentSession().createQuery("from com.wisemapping.model.Collaboration c where c.role=:roleId"); query.setParameter("roleId", collaborationRole.ordinal()); - return query.list(); + return query.getResultList(); } @Override public Collaboration findCollaboration(final int mindmapId, final User user) { final Collaboration result; - Query query = currentSession().createQuery("from com.wisemapping.model.Collaboration collaboration where mindMap.id=:mindMapId and colaborator_id=:collaboratorId"); - query.setParameter("mindMap", mindmapId); + Query query = currentSession().createQuery("from com.wisemapping.model.Collaboration c where c.mindMap.id=:mindmapId and c.id=:collaboratorId"); + query.setParameter("mindmapId", mindmapId); query.setParameter("collaboratorId", user.getId()); - final List mindMaps = query.list(); + final List mindMaps = query.getResultList(); if (mindMaps != null && !mindMaps.isEmpty()) { result = mindMaps.get(0); @@ -222,7 +232,7 @@ public class MindmapManagerImpl query.setParameter("title", title); query.setParameter("creator", user); - List mindMaps = query.list(); + List mindMaps = query.getResultList(); if (mindMaps != null && !mindMaps.isEmpty()) { result = mindMaps.get(0); diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Label.java b/wise-webapp/src/main/java/com/wisemapping/model/Label.java index 28198bdc..4dd4fbd6 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/Label.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Label.java @@ -1,6 +1,7 @@ package com.wisemapping.model; +import org.hibernate.annotations.CacheConcurrencyStrategy; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -9,6 +10,8 @@ import java.io.Serializable; @Entity @Table(name = "LABEL") +@Cacheable +@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Label implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -16,7 +19,7 @@ public class Label implements Serializable { @NotNull private String title; @NotNull private String color; - @NotNull private String iconName; + @Nullable private String iconName; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="creator_id",nullable = true,unique = true) @@ -70,7 +73,7 @@ public class Label implements Serializable { this.color = color; } - @NotNull + @Nullable public String getIconName() { return iconName; } @@ -94,7 +97,7 @@ public class Label implements Serializable { public int hashCode() { long result = id; result = 31 * result + title.hashCode(); - result = 31 * result + creator.hashCode(); + result = 31 * result + (creator!=null?creator.hashCode():0); result = 31 * result + (parent != null ? parent.hashCode() : 0); return (int) result; } diff --git a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java index 8aa1cbf1..6c12f841 100644 --- a/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java +++ b/wise-webapp/src/main/java/com/wisemapping/model/Mindmap.java @@ -47,11 +47,11 @@ public class Mindmap implements Serializable { private Calendar lastModificationTime; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "creator_id", unique = true, nullable = true) + @JoinColumn(name = "creator_id", unique = true) private User creator; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "last_editor_id", unique = false, nullable = false) + @JoinColumn(name = "last_editor_id", nullable = false) private User lastEditor; private String description; @@ -62,14 +62,13 @@ public class Mindmap implements Serializable { @OneToMany(mappedBy="mindMap",orphanRemoval = true, cascade = {CascadeType.ALL},fetch = FetchType.LAZY) private Set collaborations = new HashSet<>(); - @ManyToMany + @ManyToMany(cascade = CascadeType.ALL) @JoinTable( name = "R_LABEL_MINDMAP", joinColumns = @JoinColumn(name = "mindmap_id"), inverseJoinColumns = @JoinColumn(name = "label_id")) private Set