2017-04-06 9 views
0

これはSpring Mongo dbを使用して既存のリストにオブジェクトを追加するには?

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

クラスであり、これはクラスSocity

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

であり、これは、私は既存のユーザー にsocityを追加したい

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

では、DBへの変更を永続化するuserRepository.save(u)を追加します。

(永続オブジェクトであるため)IDである限り、それは更新されます。 IDがない場合は、DBに新しいオブジェクトとして保存されます。

+0

ありがとうございます! –

+0

郵便配達員と一緒に休憩サービスをテストするときにこのエラーが発生する "ドキュメントを読み取れませんでした:START_ARRAYトークンのインスタンスをデシリアライズできません\ n –

+0

@Oo完全なスタックトレースなしであなたが現在の完全なコードとスタックトレースで新しい質問を開くと、それは別の問題です。 – Tom

0

あなたは新しいsocityを追加した後、ユーザを保存することを忘れてしまいます。そして、あなたはアドユーザー()メソッドを使用する必要はありません私のアップデート

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

を確認してください。新しいユーザーを追加したい場合は、単にあなたはまた、2つのリポジトリ

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); 
が必要

userRepository.save(user); 

を使用

}

+0

私のprobleは私がuserRepository.save(u)を追加することを忘れていたことです –

+0

私はこのエラー "ドキュメントを読み取れませんでした:START_ARRAYトークンの外にインスタンスを逆シリアル化できません\ n –

関連する問題