运行无报错,序列化ID无法解决,需要使用@Query手动写SQL解决,现在这个问题只产生在中间关联表上,正常实体类不会
This commit is contained in:
parent
94aeb16a61
commit
6d9ce4e2fd
@ -1,3 +1,11 @@
|
||||
|
||||
# 问题解决方案
|
||||
##### 1、Cannot compare left expression of type 'java.io.Serializable' with right expression of type 'java.lang.Long'
|
||||
```
|
||||
使用@Query查询,因为无法解决序列化问题
|
||||
```
|
||||
|
||||
|
||||
`
|
||||
分层结构从上到下:
|
||||
`
|
||||
@ -124,4 +132,5 @@ true, false, 2, '市场部',
|
||||
('updated_user', '$2a$10$mW/yJPHjyueQ1g26YxiZNOtr6bKVF4P/w/VHLVHHhxslY.YlXhbcm', '小张', 'xiaozhang@example.com', '13800138007',
|
||||
true, false, 3, '财务部',
|
||||
'admin', '2024-02-01 09:00:00', 'admin', '2024-03-01 15:00:00', 5);
|
||||
```
|
||||
```
|
||||
|
||||
|
||||
@ -30,11 +30,9 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
@Transactional
|
||||
public abstract class BaseServiceImpl<T extends Entity<ID>, ID extends Serializable> implements IBaseService<T, ID> {
|
||||
public abstract class BaseServiceImpl<T extends Entity<ID>, ID extends Number & Serializable> implements IBaseService<T, ID> {
|
||||
|
||||
protected final IBaseRepository<T, ID> repository;
|
||||
|
||||
@ -286,12 +284,10 @@ public abstract class BaseServiceImpl<T extends Entity<ID>, ID extends Serializa
|
||||
@Override
|
||||
public List<T> findAll(BaseQuery query) {
|
||||
BooleanBuilder builder = new BooleanBuilder().and(Expressions.asBoolean(true).isTrue());
|
||||
|
||||
// 添加查询条件
|
||||
if (query != null) {
|
||||
buildQueryPredicate(query, builder);
|
||||
}
|
||||
|
||||
// 处理软删除
|
||||
if (query == null || query.getDeleted() == null) {
|
||||
Class<?>[] genericTypes = GenericTypeResolver.resolveTypeArguments(getClass(), BaseServiceImpl.class);
|
||||
@ -306,12 +302,10 @@ public abstract class BaseServiceImpl<T extends Entity<ID>, ID extends Serializa
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取排序信息
|
||||
Sort sort = query != null && StringUtils.hasText(query.getSortField()) ?
|
||||
Sort.by(Sort.Direction.fromString(query.getSortOrder()), query.getSortField()) :
|
||||
Sort.by(Sort.Direction.DESC, "createTime");
|
||||
|
||||
// 执行查询并返回结果
|
||||
Iterable<T> iterable = repository.findAll(builder, sort);
|
||||
List<T> result = new ArrayList<>();
|
||||
|
||||
@ -1,13 +1,24 @@
|
||||
package com.qqchen.deploy.backend.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.qqchen.deploy.backend.common.annotation.LogicDelete;
|
||||
import com.qqchen.deploy.backend.common.domain.Entity;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.FetchType;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.OneToMany;
|
||||
import jakarta.persistence.Table;
|
||||
import jakarta.persistence.Transient;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Data
|
||||
@ -42,5 +53,17 @@ public class Menu extends Entity<Long> {
|
||||
@Column(nullable = false)
|
||||
private Boolean enabled = true;
|
||||
|
||||
// List<RoleMenu> roleMenu;
|
||||
}
|
||||
// 通过RoleMenu关联到Role
|
||||
@OneToMany(mappedBy = "menu")
|
||||
@JsonIgnore
|
||||
@ToString.Exclude
|
||||
private Set<RoleMenu> roleMenus = new HashSet<>();
|
||||
|
||||
// 便捷方法:获取所有关联的角色
|
||||
@Transient
|
||||
public Set<Role> getRoles() {
|
||||
return roleMenus.stream()
|
||||
.map(RoleMenu::getRole)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,7 @@ import com.qqchen.deploy.backend.common.annotation.LogicDelete;
|
||||
import com.qqchen.deploy.backend.common.domain.Entity;
|
||||
import jakarta.persistence.CascadeType;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.OneToMany;
|
||||
import jakarta.persistence.Table;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
@ -41,4 +42,9 @@ public class Role extends Entity<Long> {
|
||||
@JsonIgnore
|
||||
@ToString.Exclude
|
||||
private Set<UserRole> userRoles = new HashSet<>();
|
||||
|
||||
@OneToMany(mappedBy = "role", cascade = CascadeType.ALL, orphanRemoval = true)
|
||||
@JsonIgnore
|
||||
@ToString.Exclude
|
||||
private Set<RoleMenu> roleMenus = new HashSet<>();
|
||||
}
|
||||
@ -1,12 +1,19 @@
|
||||
package com.qqchen.deploy.backend.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.qqchen.deploy.backend.common.annotation.LogicDelete;
|
||||
import com.qqchen.deploy.backend.common.domain.Entity;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.FetchType;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToMany;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.Table;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
@Data
|
||||
@ -16,9 +23,22 @@ import lombok.EqualsAndHashCode;
|
||||
@LogicDelete
|
||||
public class RoleMenu extends Entity<Long> {
|
||||
|
||||
@Column(name = "role_id", nullable = false)
|
||||
private Long roleId;
|
||||
|
||||
@Column(name = "menu_id", nullable = false)
|
||||
private Long menuId;
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "role_id")
|
||||
@JsonIgnore
|
||||
@ToString.Exclude
|
||||
private Role role;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "menu_id")
|
||||
@JsonIgnore
|
||||
@ToString.Exclude
|
||||
private Menu menu;
|
||||
|
||||
protected RoleMenu() {}
|
||||
|
||||
public RoleMenu(Role role, Menu menu) {
|
||||
this.role = role;
|
||||
this.menu = menu;
|
||||
}
|
||||
}
|
||||
@ -3,16 +3,18 @@ package com.qqchen.deploy.backend.repository;
|
||||
|
||||
import com.qqchen.deploy.backend.common.repository.IBaseRepository;
|
||||
import com.qqchen.deploy.backend.entity.RoleMenu;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface IRoleMenuRepository extends IBaseRepository<RoleMenu, Long> {
|
||||
|
||||
List<RoleMenu> findByRoleId(Long roleId);
|
||||
|
||||
void deleteByRoleId(Long roleId);
|
||||
|
||||
List<RoleMenu> findByRoleIdIn(List<Long> roleIds);
|
||||
}
|
||||
|
||||
// List<RoleMenu> findByRoleId(Long roleId);
|
||||
//
|
||||
// void deleteByRoleId(Long roleId);
|
||||
//
|
||||
// List<RoleMenu> findByRoleIdIn(List<Long> roleIds);
|
||||
// 通过角色ID查询
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user