【发布时间】:2021-10-12 17:29:05
【问题描述】:
所以对于这个任务,我应该有 2 个微服务(任务服务和用户服务),每个都有自己的数据库。 一个任务可以分配给多个用户,但可以将多个用户分配给多个任务,因此它是多对多关系。
这两个微服务都是使用 Hibernate 的 Spring Boot 应用程序,我正在努力使任务服务中的任务和用户之间发生这种关系,因为我认为复制已经存在的用户模型不是一个好主意用户服务,交给任务服务。
此分配假定两个数据库中的用户 ID 保持一致,而无需使用外键。
对于上下文:
Task.java [任务服务]
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
public class Task extends BaseEntity {
private String name, description;
@ManyToOne
private Lane lane;
@OneToMany
private List<TaskUser> users;
}
TaskUser.java [任务服务]
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
@EqualsAndHashCode
public class TaskUser {
@Id
private Long id;
@Column(name = "task_id")
private Long taskId;
@Column(name = "user_id")
private Long userId;
}
User.java [用户服务]
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class User extends BaseEntity {
@Column(unique = true)
private String username;
}
目前,Hibernate 正在任务服务数据库中生成一个 task_user 和 task_users 表,我希望只有一个中间表而不是两个。
问题:我如何让这种多对多关系与 Hibernate 一起使用,同时使用两个不同的微服务?
【问题讨论】:
-
您需要执行什么样的任务?您可以从用户注册、登录、任务创建、任务分配等业务需求开始。在所有这些中,用户模块不应该对任务服务有任何依赖。虽然,任务服务可能会连接到用户服务以获取用户数据。用户 db 将没有任务详细信息。只需在任务服务的任务表中为用户创建一列
-
一个任务可以有多个用户,所以我很确定任务表上的一列不起作用。对任务服务的调用将通过 angular webapp 而不是用户服务来完成。
-
这就是您对方法的看法。您可以拥有一个带有 alloc-id 和
task-idas pk 的allocation-table(请参阅 embeddable ids),然后将多个用户(记录)与相同的task-id和新的alloc-id关联(自动生成)。 -
这在 Spring Boot Hibernate 上下文中会是什么样子?
标签: java spring spring-boot hibernate jpa