diff --git a/pom.xml b/pom.xml
index eab5fa38..0a6845e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -196,6 +196,26 @@
org.hibernate.orm
hibernate-core
+
+
+ org.hibernate.orm
+ hibernate-jcache
+
+
+
+ org.redisson
+
+
+ redisson-hibernate-6
+ 3.23.4
+
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ 3.23.4
+
+
com.alibaba
diff --git a/src/main/java/cn/lihongjie/coal/permission/entity/PermissionEntity.java b/src/main/java/cn/lihongjie/coal/permission/entity/PermissionEntity.java
index e5a5e2a3..1303f0ad 100644
--- a/src/main/java/cn/lihongjie/coal/permission/entity/PermissionEntity.java
+++ b/src/main/java/cn/lihongjie/coal/permission/entity/PermissionEntity.java
@@ -2,10 +2,12 @@ package cn.lihongjie.coal.permission.entity;
import cn.lihongjie.coal.resource.entity.ResourceEntity;
import cn.lihongjie.coal.base.entity.CommonEntity;
+import jakarta.persistence.Cacheable;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import lombok.Data;
+import org.hibernate.annotations.Cache;
import org.hibernate.annotations.Comment;
import java.util.List;
@@ -13,12 +15,14 @@ import java.util.List;
@Data
@Entity
@Comment("权限")
+@Cacheable
public class PermissionEntity extends CommonEntity {
@ManyToMany()
@JoinTable(foreignKey = @jakarta.persistence.ForeignKey(name = "none" , value = jakarta.persistence.ConstraintMode.NO_CONSTRAINT),
inverseForeignKey = @jakarta.persistence.ForeignKey(name = "none" , value = jakarta.persistence.ConstraintMode.NO_CONSTRAINT))
+ @Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private List resources;
diff --git a/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java b/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java
index 98679d37..cea1d0da 100644
--- a/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java
+++ b/src/main/java/cn/lihongjie/coal/resource/entity/ResourceEntity.java
@@ -18,13 +18,16 @@ import java.util.List;
@Comment("资源")
@Slf4j
@Table(indexes = {@Index(name = "idx_resource_type_code", columnList = "type,code", unique = true)})
+@Cacheable
public class ResourceEntity extends CommonEntity {
@ManyToMany(mappedBy = "resources")
+ @org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private List permissions;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
+ @org.hibernate.annotations.Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private List children;
@ManyToOne
diff --git a/src/main/java/cn/lihongjie/coal/role/entity/RoleEntity.java b/src/main/java/cn/lihongjie/coal/role/entity/RoleEntity.java
index b943693a..0c69f496 100644
--- a/src/main/java/cn/lihongjie/coal/role/entity/RoleEntity.java
+++ b/src/main/java/cn/lihongjie/coal/role/entity/RoleEntity.java
@@ -1,28 +1,28 @@
package cn.lihongjie.coal.role.entity;
-import cn.lihongjie.coal.permission.entity.PermissionEntity;
import cn.lihongjie.coal.base.entity.OrgCommonEntity;
+import cn.lihongjie.coal.permission.entity.PermissionEntity;
import cn.lihongjie.coal.user.entity.UserEntity;
-import com.fasterxml.jackson.annotation.JsonBackReference;
+import jakarta.persistence.Cacheable;
import jakarta.persistence.Entity;
import jakarta.persistence.ManyToMany;
import lombok.Data;
+import org.hibernate.annotations.Cache;
import java.util.List;
@Entity
@Data
-
+@Cacheable
public class RoleEntity extends OrgCommonEntity {
-
-
@ManyToMany(mappedBy = "roles")
- @JsonBackReference
+ @Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private List users;
@ManyToMany
+ @Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private List permissions;
}
diff --git a/src/main/java/cn/lihongjie/coal/spring/config/HibernateConfig.java b/src/main/java/cn/lihongjie/coal/spring/config/HibernateConfig.java
index 06014e62..9ae28e48 100644
--- a/src/main/java/cn/lihongjie/coal/spring/config/HibernateConfig.java
+++ b/src/main/java/cn/lihongjie/coal/spring/config/HibernateConfig.java
@@ -5,6 +5,7 @@ import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.orm.jpa.HibernatePropertiesCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -15,13 +16,32 @@ import java.util.Map;
public class HibernateConfig {
+ @Autowired
+ MyRedissonRegionFactory myRedissonRegionFactory;
+
+
@Bean
HibernatePropertiesCustomizer hibernatePropertiesCustomizer() {
return new HibernatePropertiesCustomizer() {
@Override
public void customize(Map hibernateProperties) {
hibernateProperties.put(AvailableSettings.DIALECT, MyPostgreSQLDialect.class.getCanonicalName());
+ //
+ hibernateProperties.put("hibernate.cache.region.factory_class", myRedissonRegionFactory);
// hibernateProperties.put(AvailableSettings.SCHEMA_MANAGEMENT_TOOL, MultithreadHibernateSchemaManagementTool.class.getCanonicalName());
+
+ /**
+ *
+ *
+ *
+ *
+ *
+ *
+ */
+ hibernateProperties.put("hibernate.cache.use_second_level_cache", "true");
+ hibernateProperties.put("hibernate.cache.use_query_cache", "false");
+ hibernateProperties.put("hibernate.cache.redisson.fallback", "true");
+
}
};
diff --git a/src/main/java/cn/lihongjie/coal/spring/config/MyRedissonRegionFactory.java b/src/main/java/cn/lihongjie/coal/spring/config/MyRedissonRegionFactory.java
new file mode 100644
index 00000000..98503d1d
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/spring/config/MyRedissonRegionFactory.java
@@ -0,0 +1,21 @@
+package cn.lihongjie.coal.spring.config;
+
+import org.hibernate.boot.registry.StandardServiceRegistry;
+import org.redisson.api.RedissonClient;
+import org.redisson.hibernate.RedissonRegionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class MyRedissonRegionFactory extends RedissonRegionFactory {
+
+ @Autowired
+ RedissonClient redissonClient;
+
+ @Override
+ protected RedissonClient createRedissonClient(StandardServiceRegistry registry, Map properties) {
+ return redissonClient;
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/user/entity/UserEntity.java b/src/main/java/cn/lihongjie/coal/user/entity/UserEntity.java
index e97809f9..692988de 100644
--- a/src/main/java/cn/lihongjie/coal/user/entity/UserEntity.java
+++ b/src/main/java/cn/lihongjie/coal/user/entity/UserEntity.java
@@ -2,16 +2,19 @@ package cn.lihongjie.coal.user.entity;
import cn.lihongjie.coal.role.entity.RoleEntity;
import cn.lihongjie.coal.base.entity.OrgCommonEntity;
+import jakarta.persistence.Cacheable;
import jakarta.persistence.Entity;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import lombok.Data;
+import org.hibernate.annotations.Cache;
import org.hibernate.annotations.Comment;
import java.util.List;
@Data
@Entity
+@Cacheable
public class UserEntity extends OrgCommonEntity {
@@ -31,9 +34,11 @@ public class UserEntity extends OrgCommonEntity {
@ManyToMany()
@JoinTable(indexes = {@jakarta.persistence.Index(name = "idx_user_roles_users_id", columnList = "users_id"), @jakarta.persistence.Index(name = "idx_user_roles_roles_id", columnList = "roles_id")})
+ @Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
private List roles;
+
@Comment("机构管理员标识")
private Boolean orgAdmin;