0

親オブジェクトにこれを持っています

@OneToMany(mappedBy="idUser", cascade = CascadeType.MERGE)
public List<Directions> directions;

そして、私のコントローラーにはこれがあります

public static void userUpdate(String apikey, JsonObject body) {
    if(validate(apikey)) {

        Long idUser = decode(apikey);
        User oldUser = User.findById(idUser);

        Map<String, User> userMap = new HashMap<String, User>();
        Type arrayListType = new TypeToken<Map<String, User>>(){}.getType();
        userMap = gson().fromJson(body, arrayListType);
        User user = userMap.get("user");

        oldUser.em().merge(user);

        oldUser.save();

    }else{
        forbidden();
    }
}

親オブジェクトを更新しますが、子オブジェクトで何かを変更しても更新されず、休止状態やOracleでも問題が発生しません。

子オブジェクトを更新しない理由を知っている人はいますか?

皆さんありがとう!

ソリューションで更新!

@JB Nizetが子オブジェクトも保存する必要があると言ったように、これが私にとってどのように機能するかです。

oldUser.em().merge(user); 
oldUser.save();

for (Direction direction : oldUser.directions) { 
    direction.save();          
}

別のアプローチ!

これとともに

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "SASHNBR", insertable = true, updatable = true)
public List<Direction> directions;

oldUser.save() を作成して、子オブジェクトを保存することができました。

4

1 に答える 1

1

私の知る限り、Play はsave()変更されたすべてのエンティティを呼び出す必要があります。そのため、おそらくユーザーの指示を反復して保存する必要があります。

for (Direction direction : user.getDirections()) {
    direction.save();
}
于 2012-07-04T12:23:02.450 に答える