Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 什么';这是一个很好的数据库实体更新/删除服务设计_Java_Spring_Service - Fatal编程技术网

Java 什么';这是一个很好的数据库实体更新/删除服务设计

Java 什么';这是一个很好的数据库实体更新/删除服务设计,java,spring,service,Java,Spring,Service,我需要指导来设计没有循环依赖关系和不必要的数据库更新的服务布局 假设我有一个包含两个实体的数据库,工厂和产品。工厂有一个产品列表,每个产品都有一个工厂的参考 public class Factory { private String id; private List<String> productIds; } public class Product { private String id; private String factoryId; } 查

我需要指导来设计没有循环依赖关系和不必要的数据库更新的服务布局

假设我有一个包含两个实体的数据库,
工厂
产品
。工厂有一个产品列表,每个产品都有一个工厂的参考

public class Factory {
    private String id;
    private List<String> productIds;
}
public class Product {
    private String id;
    private String factoryId;
}
查找、创建、更新和删除的业务逻辑放在服务类中,每个实体一个。删除产品时,应将其从工厂列表中删除。删除工厂时,列表中的所有产品也应删除

public class FactoryService {
    public boolean deleteFactory(Factory factory) {
        // Bunch of other things happening

        factory.getProductIds().forEach(productId -> {
            productRepository.deleteProductWithId(productId);
        });
    }

    public void removeProductFromFactory(Product product, Factory factory) {
        factory.getProductIds().remove(product.getId());
        factoryRepository.save(factory);
    }
    ...
}
public class ProductService {
    public boolean deleteProduct(Product product) {
        // Bunch of other things happening
        Factory factory = factoryService.findById(product.getFactoryId());
        factoryService.removeProductFromFactory(product, factory);
        productRepository.delete(product);
    }
    ...
}
为了避免在删除产品时重复
//发生的大量其他事情的代码,我想在这两个服务中重用代码。但是,正如您所看到的,当factoryService调用productService时,它会创建一个循环依赖项,而当工厂被删除时,productService又会调用factoryService。另一个问题是,删除工厂时,会对数据库进行不必要的更新。这是因为当删除每个产品时,产品删除方法会更新工厂。即使将新功能
deleteAllProducts
添加到
FactoryService
-类中,也至少会执行一次更新。由于工厂将被删除,这是一个不必要的操作


如果我要重做所有这些,什么是更好的设计?我错过了什么帮助班?我是否使用了错误的服务类?

欢迎使用SO。我认为上述方法没有任何问题。但既然你问了,如果你要重做这一切,那就走纯JDBC路线吧。这将给你更多的控制和简单。但我想,每当我们必须做出选择时,我们都知道好的和不好的事情。我有没有提到我们可以比较苹果(JPA)和橙子(JDBC)?我会选择我觉得更美味的。只需将级联删除添加到您的数据库?欢迎使用SO。我认为上述方法没有任何问题。但既然你问了,如果你要重做这一切,那就走纯JDBC路线吧。这将给你更多的控制和简单。但我想,每当我们必须做出选择时,我们都知道好的和不好的事情。我有没有提到我们可以比较苹果(JPA)和橙子(JDBC)?我会选择我觉得更美味的。只需添加级联删除到您的数据库?
public class FactoryService {
    public boolean deleteFactory(Factory factory) {
        // Bunch of other things happening

        factory.getProductIds().forEach(productId -> {
            productRepository.deleteProductWithId(productId);
        });
    }

    public void removeProductFromFactory(Product product, Factory factory) {
        factory.getProductIds().remove(product.getId());
        factoryRepository.save(factory);
    }
    ...
}
public class ProductService {
    public boolean deleteProduct(Product product) {
        // Bunch of other things happening
        Factory factory = factoryService.findById(product.getFactoryId());
        factoryService.removeProductFromFactory(product, factory);
        productRepository.delete(product);
    }
    ...
}