Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 微服务最佳实践-3级数据结构_Java_Microservices - Fatal编程技术网

Java 微服务最佳实践-3级数据结构

Java 微服务最佳实践-3级数据结构,java,microservices,Java,Microservices,我有一个三级数据结构 1级 身份证,姓名 二级 ID、名称、ID\u级别1 三级 ID、名称、ID\u级别2 其想法是创建一个单一的微服务来管理三个表上的积垢 但最好的解决方案是什么 您想运行一个一次性处理数据输入的API,还是用三个不同的API组管理表 我认为一次性输入数据会导致以下问题: 管理CRUD事务 前端复杂性 在您的情况下,我建议您应用通常用于管理层次结构的 并公开一个微服务,以降低您的级别 在一个表中,级别将有3列: id(主键) 名称 父id(可空外键指的是级别id,在删除级

我有一个三级数据结构

1级 身份证,姓名

二级 ID、名称、ID\u级别1

三级 ID、名称、ID\u级别2

其想法是创建一个单一的微服务来管理三个表上的积垢

但最好的解决方案是什么

您想运行一个一次性处理数据输入的API,还是用三个不同的API组管理表

我认为一次性输入数据会导致以下问题:

  • 管理CRUD事务
  • 前端复杂性

在您的情况下,我建议您应用通常用于管理层次结构的

并公开一个微服务,以降低您的级别

在一个表中,级别将有3列:

  • id(主键)
  • 名称
  • 父id(可空外键指的是级别id,在删除级联时,这意味着您将)
CREATE TABLE`level`(
`id`int无符号非空自动增量主键,
`name`varchar(500)NULL,
`parentId`int无符号NULL
);
改变表格级别`
在更新时删除级联时添加外键(`parentId`)引用`level`(`id`),不执行任何操作
java类将具有:

  • 根级别的parentId为null
  • 叶级别没有子级
  • 从位置1开始,使用递归方法找到级别编号
import javax.persistence.*;
导入javax.validation.constraints.Size;
导入java.util.Set;
@实体
@表(name=“level”)
公营班级
{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(updateable=false,nullable=false)
私有int-id;
@纵队
@尺寸(最大值=500)
私有字符串名称;
@ManyToOne()
@JoinColumn(name=“parentId”)
私人层面的家长;
@OneToMany(mappedBy=“parent”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私人儿童;
公共布尔isLeaf(){
返回(children==null | | children.size()==0);
}
公共布尔值isRoot(){
返回(父项==null);
}
public int getLevelNumber(){
返回getLevelNumber(1);
}
私有int getLevelNumber(int currentLevel){
返回parent==null?currentLevel:parent.getLevelNumber(currentLevel+1);
}
公共int getId()
{
返回id;
}
公共无效集合id(内部id)
{
this.id=id;
}
公共字符串getName()
{
返回名称;
}
公共void集合名(字符串名)
{
this.name=名称;
}
公共级别的getParent()
{
返回父母;
}
公共无效集合父级(级别父级)
{
this.parent=parent;
}
公共集getChildren()
{
返回儿童;
}
公共无效集合子对象(集合子对象)
{
这个。孩子=孩子;
}
}
在我看来,这是最好的优化解决方案

然后我将有一个单一的存储库


公共接口级存储库扩展了JpaRepository
{
}

如果确实需要通过鉴别器值来区分数据库中的级别,那么可以添加鉴别器值并管理多个java对象。它可以让您更清楚地了解java项目结构,但会使代码和事务管理更加复杂。

在回答您的问题之前,您能告诉我您是使用Hibernate还是使用JDBC来持久化数据吗?你在用SpringBoot吗?是的,我在用SpringBoot,我会用SpringData