如何使用Spring Mongo db将对象添加到现有List?

时间:2017-04-06 10:53:05

标签: spring spring-boot spring-data-mongodb

这是A级

@Document
class Socity{
private String id ;
private String name;
}

这是社会阶级

public User addUser(User user) {
    List<Socity> socity = new ArrayList<>();
    user.setsocitys (socity );
    return  userRepository.save(user);
}

这是添加用户功能

public static void main(String[] args) {
    ApplicationContext ctx  = SpringApplication.run (App.class, args);
    SocityDao SDao = ctx.getBean(SocityDao .class);
    UserRepository userRepository = ctx.getBean(UserRepository.class);

    User u = userRepository.findOne("");
    Socity s = new Socity("soc1");
    SDao .addSocity(e);
    u.getSocitys().add(e);

}

我想为现有用户添加社交性 我试试这个,但它不起作用

@RequestMapping(value = "up/{id}", method = RequestMethod.POST ,produces = 
"application/json")
public User addSocityToUser(@RequestBody Socity, @PathVariable  String id) 
{

     return SocityDAO.addSocityToUser(e, id);
}

这是休息服务

<input type="checkbox" id="checkbox" value="brand.php?brand=bmw" name="bmw" <?php echo $checked; ?> > BMW</li>
<input type="checkbox" id="checkbox" value="brand.php?brand=toyota" name="toyota"> Toyota</li>
<input type="checkbox" id="checkbox" value="brand.php?brand=farari" name="farari" checked > Farari</li>
<input type="checkbox" id="checkbox" value="brand.php?brand=nissan" name="nissan" checked > Nissan</li>

3 个答案:

答案 0 :(得分:0)

在代码的最后添加userRepository.save(u)以保留对数据库的更改。

只要它作为ID(因为它是一个持久化对象),它就会被更新。如果它没有ID,它将被保存为数据库中的新对象。

答案 1 :(得分:0)

添加新社交后,您似乎忘记保存用户。请检查我的更新

@Document
public class Socity {
    private String id ;
    private String name;
}

@Document
public class User {
    private String id;
    private String name;
    @DBRef
    private List<Socity> socitys = new ArrayList<>();
}

然后你不需要使用你的addUser()方法。如果您想添加新用户,请使用

 userRepository.save(user);

您还需要两个存储库

public interface SocityRepository extends MongoRepository<Socity, String> {
}

public interface UserRepository extends MongoRepository<User, String> {
    }

你在主要方法中需要什么

public static void main(String[] args) {
ApplicationContext ctx  = SpringApplication.run (App.class, args);
UserRepository userRepository = ctx.getBean(UserRepository.class);
SocityRepository socityRepository = ctx.getBean(SocityRepository.class);

User u = userRepository.findOne("");
Socity s = socityRepository.save(new Socity("soc1"));
u.getSocitys().add(s);
userRepository.save(u);

}

答案 2 :(得分:0)

总是最好使用MongoTemplate编写更新查询并使用Push函数添加到列表中。

@Autowired
private MongoTemplate mongoTemplate;

 function(String id, Socity socity){
     Query query = new Query(Criteria.where("id").is(id));                  
     Update update = new Update();          
     update.push("Socitys", socity);
     mongoTemplate.updateFirst(query, update, User.class);
}