Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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_Jakarta Ee_Many To Many - Fatal编程技术网

在Java中映射多对多关联的最佳方法

在Java中映射多对多关联的最佳方法,java,jakarta-ee,many-to-many,Java,Jakarta Ee,Many To Many,我想知道在JAVA中映射多个关联的最佳方法是什么。我有三张这样的表格: +----------+ +-----------------+ +----------+ | products | | products_stores | | stores | +----------+ +-----------------+ +----------+ | barecode | | #barecode | | storeID | |

我想知道在JAVA中映射多个关联的最佳方法是什么。我有三张这样的表格:

+----------+    +-----------------+    +----------+ 
| products |    | products_stores |    | stores   | 
+----------+    +-----------------+    +----------+ 
| barecode |    | #barecode       |    | storeID  | 
| name     |----| #storeID        |----| location | 
+----------+    | price           |    +----------+ 
                +-----------------+    
我想用两种方法来重新发送JAVA。我想知道哪一个在性能或其他方面更好

第一种方式:

第二种方式:

公共类产品{
私有字符串名称;
私有字符串编码;
私有HashMap价格表;
公共产品(字符串名称、字符串代码、HashMap价格表){/}
//吸气剂/塞特
}
公共类商店{
私有字符串名称;
私有字符串位置;
公共存储(字符串名称、字符串位置){/*…*/}
//吸气剂/塞特
}
我的第一个想法是第一种方式,但我也想到了第二种方式,我想知道哪种更好,如果有的话。或者如果有比这两个更好的方法


多谢各位

取决于您打算如何处理数据。例如,如果希望通过Store对象执行大量查询操作,则第二种方法更好。在这种情况下,HashMap非常方便,当然是以内存为代价的。但是,如果您主要关心的是存储,并且Store类中没有太多重叠,那么第一种方法更好,因为您可以创建一个产品对象列表并不断添加到其中


关于用例的更多信息将有助于更好地了解您的情况。

我将使用三个对象,就像您有三个DB表一样:

  • 产品
    描述与销售地点无关的产品
  • 商店
    描述商店
  • ProductOffer
    描述产品在何处提供以及价格
根据您的使用情况,
ProductOffer
s列表可能是
Store
Product
的一部分,或者可以有一个独立的容器,使用例如multimap
Product
->
列表来管理产品和门店之间的关系。或者
ProductOffer
可以链接到
Product
Store


为第三类制作类的理由是可扩展性-它可以很容易地满足你想要考虑商店中的产品可用性,例如,

产品应该知道它在哪个商店出售吗?我会说不。你为什么不简单点呢。一个产品有一个明确的代码、名称、价格。商店有店号、位置和产品列表。@Diyarbakir它是一个比较商店之间价格的应用程序,所以。。是的,我需要先知道商店。谢谢。第二,它是一个比较商店之间价格的应用程序。用户搜索一种产品,我们将显示一个产品列表,其中包含价格和相关商店。如果用户点击产品,调用Store类基本上只是为了创建行程。请尝试在product类中创建一个Store对象列表。此外,price属性应该在Product类中。或者,我认为第二种方法更适合您,因为您需要显示每个产品的门店列表。有了HashMap,您就可以同时显示商店名称和价格了。此外,为什么要将商店作为产品的内部类?为什么不将它们创建为单独的类呢。然后,Product类可以有一个HashMap,Store类可以有一个HashMap。这样你就可以按商店和产品进行搜索。这有意义吗?好的,我就是这么想的,谢谢。所以我选择第二条路。但使用hasmap不是性能杀手吗?对于内存来说,是的,取决于数据的大小。但它会给你带来巨大的时间收益,这对你的表现有什么影响?因为,举个例子,如果10个商店中有1个产品,我必须创建1个产品、10个产品和10个商店,而不是使用hashmap创建1个产品和10个商店。我不知道哪一个更好。一个对象创建和每个提供几个字节。除非/直到您真正面临性能问题,否则您不会担心太多,然后您必须分析您的应用程序以找到薄弱点。最后一个问题,hashmap的主要区别是什么?因为,基本上ProductOffer代表另一个类中的hashmap,所以它只是为了靠近DB表,还是有其他东西?1。它更具可读性,因为实际上有一个名为
price
的字段,而
Map
方法只是将存储映射到一个数字2。添加优惠的另一个属性(例如可用性标志)更容易-使用
Map
您可能必须将其存储在另一个
Map
中,或者将存储映射到同时包含这两个属性的结构中-这本质上又是
ProductOffer
。好吧,我认为您已经找到了最好的方法!谢谢D
    public class Product {

        private String name;
        private String barecode;
        private double price;
        private Store store;

        public Product(String name, String barecode, double price, Store store){/*...*/}
        //getter/setter
    }

    public class Store {

            private String name;
            private String location;

            public Store(String name, String location){/*...*/}
            //getter/setter
    }
    public class Product {

        private String name;
        private String barecode;
        private HashMap<Store, double> priceList;

        public Product(String name, String barecode, HashMap<Store, double> priceList){//}
        //getter/setter
    }

    public class Store {

            private String name;
            private String location;

            public Store(String name, String location){/*...*/}
            //getter/setter
    }