2012-02-20 7 views
1

私は2つのエンティティPersonとcarの間に多量のマッピングを作成しました。予想通り、新しいテーブルPerson_Carが表示されます。以下はPerson.javaのコードですSpring Roo Hibernateの更新エントリの多対多マッピング

@ManyToMany(cascade = CascadeType.ALL, mappedBy = "persons") 
private Set<Car> cars= new HashSet<Car>(); 

ここで、テーブルにエントリを追加します。私は車をpersonオブジェクトに設定し、person.merge()を実行します。

@RequestMapping(value ="/saveCars", method = RequestMethod.POST) 
@ResponseBody 
public String saveCars(@RequestParam("personId")Long personId,          @RequestParam("cars") String incomingCars){ 
Map<String, Object> response = new HashMap<String, Object>(); 
try{   
... 
Person person = Person.findPerson(personId); 
Set<Car> cars = person.getCars(); 
     for(int i=0 ; i<temp.length ; i++){ 
      carID = Long.parseLong(temp[i]); 
      cars.add(Car.findCar(carID)); 
     } 
     person.setCars(cars); 
     person.merge(); 
    } 
    LOG.debug("cars successfully added to questionnaire"); 
    response.put("message", "success"); 
} 
return new JSONSerializer().exclude("*.class").deepSerialize(response); 
} 

ただし、Person_Carテーブルにはエントリが作成されていません。しかし、私が何かをすると、

Person person = Person.findPerson(personId); 
person.setName("Jonathan"); 
person.merge(); 

私は人のテーブルに反映されて参照してください。私は間違って何をしていますか?ありがとう

答えて

1

コントローラメソッドに@Transactional(rollback=false)を追加してみてください。

rollback=falseはデフォルトですのでスキップすることができ、@Transactionalのみが残ります。

関連する問題