diff --git a/flyfish-data/flyfish-data-domain/pom.xml b/flyfish-data/flyfish-data-domain/pom.xml
index 57248f8..9b5a88b 100644
--- a/flyfish-data/flyfish-data-domain/pom.xml
+++ b/flyfish-data/flyfish-data-domain/pom.xml
@@ -23,8 +23,9 @@
flyfish-common
- org.springframework.data
- spring-data-relational
+ com.flyfish.framework
+ flyfish-data-r2dbc
+ ${revision}
true
diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java
index 16c8b35..24562a5 100644
--- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java
+++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java
@@ -3,6 +3,7 @@ package com.flyfish.framework.domain.po;
import com.flyfish.framework.domain.tree.TreeDomain;
import lombok.*;
import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
/**
@@ -24,6 +25,7 @@ public class Department extends TreeDomain {
/**
* 部门的完整名称
*/
+ @Column("full_name")
private String fullName;
/**
diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java
index 17e1c36..377584a 100644
--- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java
+++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java
@@ -3,8 +3,9 @@ package com.flyfish.framework.domain.po;
import com.flyfish.framework.domain.base.AuditDomain;
import com.flyfish.framework.enums.NamedEnum;
import com.flyfish.framework.enums.RoleType;
+import com.flyfish.framework.r2dbc.mapping.Association;
import lombok.*;
-import org.springframework.data.annotation.Reference;
+import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.relational.core.mapping.Table;
@@ -47,7 +48,8 @@ public class Role extends AuditDomain {
/**
* 角色拥有的权限
*/
- @Reference(Permission.class)
+ @DBRef
+ @Association(relationTable = "rel_role_permission", field = "role_id", foreignField = "permission_id")
private List permissions;
/**
diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java
index 1cc1207..33bd55a 100644
--- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java
+++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java
@@ -6,12 +6,14 @@ import com.flyfish.framework.domain.base.AuditDomain;
import com.flyfish.framework.domain.base.IUser;
import com.flyfish.framework.enums.UserStatus;
import com.flyfish.framework.enums.UserType;
+import com.flyfish.framework.r2dbc.mapping.Association;
import com.flyfish.framework.validation.spi.ConditionalGroup;
import lombok.*;
-import org.springframework.data.annotation.Reference;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;
+import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;
import java.time.LocalDateTime;
@@ -70,23 +72,27 @@ public class User extends AuditDomain implements IUser {
* 有效期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
+ @Column("valid_date")
private LocalDateTime validDate;
/**
* 可操作校区
*/
- @Reference(Department.class)
+ @DBRef
+ @Association(relationTable = "rel_user_depart", field = "user_id", foreignField = "depart_id")
private List departments;
/**
* 所属角色
*/
- @Reference(Role.class)
+ @DBRef
+ @Association(relationTable = "rel_user_depart", field = "user_id", foreignField = "depart_id")
private List roles;
/**
* 微信openId
*/
+ @Column("open_id")
private String openId;
/**
@@ -103,11 +109,13 @@ public class User extends AuditDomain implements IUser {
/**
* 错误次数,防止恶意登录
*/
+ @Column("error_count")
private Integer errorCount = 0;
/**
* 上次登录日期
*/
+ @Column("last_time")
private LocalDateTime lastTime;
@Override
diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java
index 8cb7af2..a160855 100644
--- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java
+++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java
@@ -4,6 +4,7 @@ import com.flyfish.framework.domain.base.AuditDomain;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Transient;
+import org.springframework.data.relational.core.mapping.Column;
import java.util.List;
@@ -14,9 +15,11 @@ public abstract class TreeDomain> extends AuditDomain {
public static final String ROOT = "0";
// 父id,顶级是0
+ @Column("parent_id")
private String parentId;
// 冗余的父ids,方便查询
+ @Column("parent_ids")
private List parentIds;
// 深度,遍历标识
diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java
index e0d1dc8..5302e69 100644
--- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java
+++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java
@@ -45,8 +45,9 @@ public class R2dbcDataConfig {
}
@Bean
- public EntityCallback referenceR2dbcCallback(R2dbcMetadataManager metadataManager) {
- return new ReferenceR2dbcCallback(metadataManager);
+ public EntityCallback referenceR2dbcCallback(R2dbcEntityOperations entityOperations, R2dbcMetadataManager metadataManager) {
+ return new ReferenceR2dbcCallback(metadataManager, entityOperations.getDatabaseClient(), entityOperations.getDataAccessStrategy()
+ .getStatementMapper());
}
@Bean
diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java
index e72aa47..50ee424 100644
--- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java
+++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java
@@ -5,8 +5,10 @@ import com.flyfish.framework.domain.base.Qo;
import com.flyfish.framework.query.Queries;
import com.flyfish.framework.r2dbc.metadata.R2dbcMetadataManager;
import com.flyfish.framework.r2dbc.metadata.R2dbcTableMetadata;
+import com.flyfish.framework.r2dbc.metadata.reference.FieldSetter;
import com.flyfish.framework.r2dbc.metadata.reference.R2dbcAssociation;
import com.flyfish.framework.r2dbc.metadata.reference.R2dbcCollection;
+import com.flyfish.framework.r2dbc.metadata.reference.R2dbcRelation;
import com.flyfish.framework.repository.DefaultReactiveRepository;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
@@ -17,12 +19,17 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.PersistentPropertyAccessor;
+import org.springframework.data.r2dbc.core.StatementMapper;
import org.springframework.data.r2dbc.mapping.event.AfterConvertCallback;
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
+import org.springframework.data.relational.core.query.Criteria;
import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.data.util.CastUtils;
import org.springframework.data.util.Lazy;
import org.springframework.lang.NonNull;
+import org.springframework.r2dbc.core.DatabaseClient;
+import org.springframework.r2dbc.core.PreparedOperation;
+import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.ArrayList;
@@ -36,6 +43,8 @@ import java.util.stream.Collectors;
public class ReferenceR2dbcCallback implements AfterConvertCallback {
private final R2dbcMetadataManager r2dbcMetadataManager;
+ private final DatabaseClient databaseClient;
+ private final StatementMapper statementMapper;
private Lazy