Java 向dynamoDB添加多个值

Java 向dynamoDB添加多个值,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,我想向DynamoDB添加多个值。我想添加所有的数据集 例如,如果有4个值,那么我想在DynamoDB中添加4行。对于“n”个接收值,应添加其中的“n”行 我在数组中循环,但仍然只有最新的数据被设置到项中,并且我只能保存一行。i、 即,每个数组的最后一个值 我怎样才能做到这一点。请帮帮我 @RequestMapping(value="/receiveRequests", method=RequestMethod.POST,produces={"application/json"}) public

我想向DynamoDB添加多个值。我想添加所有的数据集

例如,如果有4个值,那么我想在DynamoDB中添加4行。对于“n”个接收值,应添加其中的“n”行

我在数组中循环,但仍然只有最新的数据被设置到项中,并且我只能保存一行。i、 即,每个数组的最后一个值

我怎样才能做到这一点。请帮帮我

@RequestMapping(value="/receiveRequests", method=RequestMethod.POST,produces={"application/json"})
public Map<String, Object> receiveRequests(@RequestParam(value="user_id") String user_id,
                                            @RequestParam(value="device_model") String device_model, 
                                            @RequestParam(value="api_key") String api_key,
                                            @RequestParam(value="score") int[] score,
                                            @RequestParam(value="registrationId") String registrationId,
                                            @RequestParam(value="userLocalTime") String[] userLocalTime,
                                            @RequestParam(value="lat") double[] lat,
                                            @RequestParam(value="lon") double[] lon,
                                            @RequestParam(value="accuracy") float[] accuracy,
                                            @RequestParam(value="userTimezone") String userTimezone,
                                            Model model)
{
            try
            {
                AmazonDynamoDBClient client = DynamoDBConfig.getAmazonDBClient();
                DynamoDBMapper mapper = new DynamoDBMapper(client);

                slf4jLogger.info("======================Begin Saving values to DynamoDB===================================================");   
                ScoreTable item = new ScoreTable();
                for(int ScoreValue : score)
                {
                    item.setScore(ScoreValue);
                    slf4jLogger.info("Saving Score: "+ScoreValue);
                }
                item.setDevice_model(device_model);
                slf4jLogger.info("Saving device_model: "+device_model);
                item.setApi_key(api_key);
                slf4jLogger.info("Saving api_key: "+api_key);
                item.setUser_id(user_id);
                slf4jLogger.info("Saving user_id: "+user_id);
                item.setRegistrationId(registrationId);
                slf4jLogger.info("Saving registrationId: "+registrationId);
                for(double latitude : lat)
                {
                    item.setLat(latitude);
                    slf4jLogger.info("Saving latitude: "+latitude);
                }
                for(double longitude : lon)
                {
                    item.setLon(longitude);
                    slf4jLogger.info("Saving longitude: "+longitude);
                }
                for(float accuracyValue : accuracy)
                {
                    item.setAccuracy(accuracyValue);
                    slf4jLogger.info("Saving accuracyValue: "+accuracyValue);
                }
                for(String userlocaltym:userLocalTime)
                {
                    item.setUserLocalTime(userlocaltym);
                    slf4jLogger.info("Saving userlocaltym: "+userlocaltym);
                }
                item.setUserTimezone(userTimezone);
                slf4jLogger.info("Saving userTimezone"+userTimezone);
                mapper.save(item);
                slf4jLogger.info("StressScore Table items: "+item);
            }           
            catch(AmazonServiceException ase)
            {
                //ase.printStackTrace();
                slf4jLogger.error(ase);
                slf4jLogger.error(ase.getMessage());
                slf4jLogger.error(ase.getStackTrace());
            }
            catch (Exception e)
            {
                //e.printStackTrace();
                slf4jLogger.error(e);
                slf4jLogger.error(e.getMessage());
                slf4jLogger.error(e.getStackTrace());
            }
 }
但我只能保存一套。

Score Table items: Score [user_id=10f353a0-c6da-44ee-a9cb, device_model=Nexus S, api_key=testApp, gen_t=1436175254608, score=98, registrationId=APA91bFOz1lCFr1dT_s-HH-TatpF1XOIQ6GF846EMfmTjd_x-wARKy1zyEwr86UXfL9K1Xm8_PHpOKVuxmUXLKXHVKurXwe75EPmnBJolvS0, lat=12.9511, lon=12.912, accuracy=613.0, userLocalTime=11-02-2015 11:25:25, userTimezone=Asia/Calcutta]
======================End Saving values to DynamoDB===================================================
DynamoDB分数表上的散列键(以及复合键的范围)是什么?我有一种感觉,你可能会一次又一次地覆盖同一项


如果表具有哈希键,则每个项在该列中必须具有唯一的值。如果表具有哈希/范围键,则多个项可以在哈希列中具有相同的值,但其范围值必须不同。更多细节。

除了@readyornot的答案之外,我还能够通过将foreach循环更改为for循环来解决问题。这是代码

//Table name: Score
//Since array size of all parameters will be same as they are dependent on each other, 
//for eg: 5 scores has 5 latitudes & 5 longitudes etc, 
//I got the size of array and looped that many no.of times.

                Score item = null;  
                for(int i=0; i<score.length; i++)
                {
                    long gen_timestamp = Calendar.getInstance().getTimeInMillis();
                    client = DynamoDBConfig.getAmazonDBClient();
                    DynamoDBMapper mapper = new DynamoDBMapper(client);
                    item = new Score();
                    item.setGen_t(gen_timestamp);
                    slf4jLogger.info(i+" Saving gen_timestamp: "+gen_timestamp);
                    item.setDevice_model(device_model);
                    slf4jLogger.info(i+" Saving device_model: "+device_model);
                    item.setApi_key(api_key);
                    slf4jLogger.info(i+" Saving api_key: "+api_key);
                    item.setUser_id(user_id);
                    slf4jLogger.info(i+" Saving user_id: "+user_id);
                    item.setRegistrationId(registrationId);
                    slf4jLogger.info(i+" Saving registrationId: "+registrationId);
                    item.setScore(score[i]);
                    slf4jLogger.info(i+" Saving Score in /receiveUpdateStressScore: "+score[i]);
                    item.setLat(lat[i]);
                    slf4jLogger.info(i+" Saving lat in /receiveUpdateStressScore: "+lat[i]);
                    item.setLon(lon[i]);
                    slf4jLogger.info(i+" Saving lon in /receiveUpdateStressScore: "+lon[i]);
                    item.setAccuracy(accuracy[i]);
                    slf4jLogger.info(i+" Saving accuracy in /receiveUpdateStressScore: "+accuracy[i]);
                    item.setUserLocalTime(userLocalTime[i]);
                    slf4jLogger.info(i+" Saving userLocalTime in /receiveUpdateStressScore: "+userLocalTime[i]);
                    item.setUserTimezone(userTimezone);
                    slf4jLogger.info(i+" Saving userTimezone: "+userTimezone);
                    slf4jLogger.info(i+"Items Saving: "+item);
                    mapper.save(item);  
                }
                slf4jLogger.info("Score Table items: "+item);
//表名:Score
//由于所有参数的数组大小都相同,因为它们相互依赖,
//例如:5分有5个纬度和5个经度等,
//我得到了数组的大小,循环了那么多次。
评分项目=空;

for(int i=0;我非常感谢你。是的,你是对的。我的表的哈希键是gen_time(timestamp),它不在for循环内。所以所有循环都有一个gen_时间,因此所有的值都会一次又一次地覆盖同一项。另外,我使用了for循环而不是foreach循环,因此问题得到了解决。再次感谢。:+1
//Table name: Score
//Since array size of all parameters will be same as they are dependent on each other, 
//for eg: 5 scores has 5 latitudes & 5 longitudes etc, 
//I got the size of array and looped that many no.of times.

                Score item = null;  
                for(int i=0; i<score.length; i++)
                {
                    long gen_timestamp = Calendar.getInstance().getTimeInMillis();
                    client = DynamoDBConfig.getAmazonDBClient();
                    DynamoDBMapper mapper = new DynamoDBMapper(client);
                    item = new Score();
                    item.setGen_t(gen_timestamp);
                    slf4jLogger.info(i+" Saving gen_timestamp: "+gen_timestamp);
                    item.setDevice_model(device_model);
                    slf4jLogger.info(i+" Saving device_model: "+device_model);
                    item.setApi_key(api_key);
                    slf4jLogger.info(i+" Saving api_key: "+api_key);
                    item.setUser_id(user_id);
                    slf4jLogger.info(i+" Saving user_id: "+user_id);
                    item.setRegistrationId(registrationId);
                    slf4jLogger.info(i+" Saving registrationId: "+registrationId);
                    item.setScore(score[i]);
                    slf4jLogger.info(i+" Saving Score in /receiveUpdateStressScore: "+score[i]);
                    item.setLat(lat[i]);
                    slf4jLogger.info(i+" Saving lat in /receiveUpdateStressScore: "+lat[i]);
                    item.setLon(lon[i]);
                    slf4jLogger.info(i+" Saving lon in /receiveUpdateStressScore: "+lon[i]);
                    item.setAccuracy(accuracy[i]);
                    slf4jLogger.info(i+" Saving accuracy in /receiveUpdateStressScore: "+accuracy[i]);
                    item.setUserLocalTime(userLocalTime[i]);
                    slf4jLogger.info(i+" Saving userLocalTime in /receiveUpdateStressScore: "+userLocalTime[i]);
                    item.setUserTimezone(userTimezone);
                    slf4jLogger.info(i+" Saving userTimezone: "+userTimezone);
                    slf4jLogger.info(i+"Items Saving: "+item);
                    mapper.save(item);  
                }
                slf4jLogger.info("Score Table items: "+item);