2017-04-06 22 views
0

這是A類如何使用Spring Mongo數據庫將對象添加到現有List?

@Document 
class User{ 
private String id ; 
private String name; 
@Dbref 
private List<Socity> Socitys; 
} 

,這是一流的法治社會

@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); 

} 

這是REST服務

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

    return SocityDAO.addSocityToUser(e, id); 
} 

回答

0

在你的代碼的末尾添加userRepository.save(u),以保存更改DB。

只要它作爲一個ID(因爲它是一個持久對象),它會被更新。如果它沒有ID,它將被保存爲數據庫中的一個新對象。

+0

感謝它的工作! –

+0

當我想與郵差 測試REST服務「無法讀取文件我得到這個錯誤:無法反序列化出START_ARRAY令牌\ n以下的情況下,在 –

+0

@Oo它很難不完整的堆棧跟蹤回答,看到的代碼該服務。同時,這是一個不同的問題,所以它的更好,如果你打開一個新的問題與您當前的完整代碼和堆棧跟蹤。 – Tom

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> { 
    } 

你在main方法需要什麼

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); 

}

+0

我proble是,我忘了添加userRepository.save(U) –

+0

我得到這個錯誤,當我想用郵差測試休息服務 「無法讀取文檔:無法反序列化超出START_ARRAY標記\ n的實例 –

相關問題