在Java中的Collection中存储数据库数据(多对多关系)的最佳方法

时间:2014-12-30 11:27:13

标签: java arraylist collections hashmap

我的问题在这里(可能是我的问题标题不合适)

我有三张桌子

  1. DATA (包含操作和设备表的外键)
  2. ACTION
  3. 设备
  4. 一个DATA可以有多个动作以及设备。

    我已将所有行缓存在DATA表中 现在我的目标是以我可以通过特定actionid和deviceid检索DATA的方式存储。 就像查询(select *from data where actionID=123 AND deviceId=456

    一样

    我的方法是采取: 使用Map<DEVICEID,Map<ACTIONID,DATAs>>进行存储,但如何生成此地图。 我有三个pojo课程:

    public class DATA {
    int dataId;
    int actionId;
    int deviceId;
    String dataDetail;
    }
    
    public class Action {
    int actionId;
    int acttionName;
    }
    
    public class Device {
    int deviceId;
    String deviceName;
    }
    
    public class GenerateObject {
    static List<DEVICE> devices = new ArrayList<DEVICE>();
    static List<Action> actions= new ArrayList();
    static List<DATA> datas = new ArrayList();
    public static void generateCollection(){
        Map<String,Map<String,List>> dataMap = new HashMap<String, Map<String,List>>();
        //Write Code which set dataMap
     }
    }
    

    在此先感谢。如果有任何新方法,那将是apreciated。

2 个答案:

答案 0 :(得分:0)

当您总是使用这两个属性进行搜索时,您可以创建一个新类,我们可以将其称为DataIdentifier,它由actionId和deviceId组成。确保它可以用作HashMap<DataIdentifier, List<String>>

中的键
  1. 覆盖public int hashCode()以返回源自actionIddeviceId以及
  2. 的哈希码
  3. 覆盖boolean equals(Object other),当actionId和deviceId相同时返回true。
  4. 然后你会像这样使用它:

    List<String> dataDetails = datas.find(new DataIdentifier(actionId, deviceId));
    

答案 1 :(得分:0)

Map<String,Map<String,List>> datas = new HashMap<String, Map<String,List>>();
Map<String,List<T>> actionMap = new HashMap<String, List<T>>;
actionMap.put("actionID", Arrays.asList(1,2)); // assuming T = Integer
datas.put("deviceID", actionMap);