2012-07-04 98 views
0

從來就得到了這個父對象JPA,合併對象更新兒童

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

這使得父對象上的更新,但當我更改子對象上的某些東西時,它不會更新它,也不會給hibernate或Oracle帶來問題。

有誰知道爲什麼它不會更新子對象?

謝謝大家!

更新瞭解決方案!

這就是它對我的作用,因爲@JB Nizet說你也必須保存子對象。

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

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

另一種說法!

由於能夠使oldUser.save(),並得到挽救了孩子的對象這

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

從來就。

+1

難道你看http://stackoverflow.com/questions/2530498/jpa-persisting-object-parent-is-ok-但孩子沒有更新 – rayyildiz

+0

@rayyildiz我做了,如果你看看我實現CascadeType.MERGE這是我想要的代碼。無論如何,我會嘗試與CascadeType.ALL。謝謝! :) – axierjhtjz

+0

@rayyildiz也沒有工作。 :( – axierjhtjz

回答

1

AFAIK,Play需要在所有修改的實體上調用save()。所以,你可能需要通過用戶的方向迭代,並保存它們:

for (Direction direction : user.getDirections()) { 
    direction.save(); 
} 
+0

感謝您的回答,這是所有我需要更多的細節: \t \t \t oldusuario.em()合併(usuario); \t \t \t \t \t \t oldusuario.save(); 。 \t \t \t \t \t爲(Direccion direccion:oldusuario.direccion){ \t \t \t direccion.save(); \t \t \t} – axierjhtjz