From ac2cf1b784888549ce36e129b776716b89c2ffc4 Mon Sep 17 00:00:00 2001 From: jomu Date: Fri, 18 Jan 2019 18:05:55 +0100 Subject: [PATCH] improved caching --- .../account/control/AccountControl.java | 1 + .../entity/ApplicationPermissionEntity.java | 25 +++++++++++++++---- .../entity/ApplicationRoleEntity.java | 24 +++++++++++++----- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java b/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java index 6986804..4edcc89 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/control/AccountControl.java @@ -115,6 +115,7 @@ public class AccountControl implements Serializable { queryBuilder.append("WHERE a.username = :username"); Query query = em.createQuery(queryBuilder.toString()); query.setParameter("username", userName); + query.setHint("org.hibernate.cacheable", true); try { return (AccountEntity) query.getSingleResult(); } catch (NoResultException ex) { diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java index 229f682..4012cb6 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationPermissionEntity.java @@ -15,11 +15,11 @@ */ package de.muehlencord.shared.account.business.application.entity; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; import java.io.Serializable; import java.util.List; import java.util.UUID; import javax.persistence.Basic; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -29,6 +29,7 @@ import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.QueryHint; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @@ -44,11 +45,25 @@ import org.hibernate.annotations.Type; @Entity @Table(name = "application_permission") @XmlRootElement +@Cacheable @NamedQueries({ - @NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application order by a.permissionName"), - @NamedQuery(name = "ApplicationPermissionEntity.findNotAssigned", query = "SELECT a FROM ApplicationPermissionEntity a LEFT OUTER JOIN a.applicationRoles r WHERE a.application=:application AND r NOT IN :permissions"), - @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionName = :permissionName"), - @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionDescription = :permissionDescription")}) + @NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application order by a.permissionName", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ApplicationPermissionEntity.findNotAssigned", query = "SELECT a FROM ApplicationPermissionEntity a LEFT OUTER JOIN a.applicationRoles r WHERE a.application=:application AND r NOT IN :permissions", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionName = :permissionName", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionDescription = :permissionDescription", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}) +}) public class ApplicationPermissionEntity implements Serializable { private static final long serialVersionUID = -8985982754544829534L; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java index f2a9519..c42d69a 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/application/entity/ApplicationRoleEntity.java @@ -16,11 +16,11 @@ package de.muehlencord.shared.account.business.application.entity; import de.muehlencord.shared.account.business.account.entity.AccountEntity; -import de.muehlencord.shared.account.business.application.entity.ApplicationEntity; import java.io.Serializable; import java.util.List; import java.util.UUID; import javax.persistence.Basic; +import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -31,6 +31,7 @@ import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.QueryHint; import javax.persistence.Table; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @@ -45,11 +46,22 @@ import org.hibernate.annotations.Type; */ @Entity @Table(name = "application_role") +@Cacheable @XmlRootElement @NamedQueries({ - @NamedQuery(name = "ApplicationRoleEntity.findAll", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application ORDER BY a.roleName"), - @NamedQuery(name = "ApplicationRoleEntity.findByRoleName", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleName = :roleName"), - @NamedQuery(name = "ApplicationRoleEntity.findByRoleDescription", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleDescription = :roleDescription")}) + @NamedQuery(name = "ApplicationRoleEntity.findAll", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application ORDER BY a.roleName", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ApplicationRoleEntity.findByRoleName", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleName = :roleName", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}), + @NamedQuery(name = "ApplicationRoleEntity.findByRoleDescription", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.application = :application AND a.roleDescription = :roleDescription", + hints = { + @QueryHint(name = "org.hibernate.cacheable", value = "true"), + @QueryHint(name = "org.hibernate.cacheRegion", value = "Queries")}) +}) public class ApplicationRoleEntity implements Serializable { @@ -86,13 +98,13 @@ public class ApplicationRoleEntity implements Serializable { public ApplicationRoleEntity() { } - + public ApplicationRoleEntity(ApplicationEntity application) { this.id = null; this.application = application; this.roleName = ""; this.roleDescription = ""; - } + } public ApplicationRoleEntity(ApplicationEntity application, String roleName, String roleDescription) { this.id = null;