2017-06-11 11 views
1

SOLUTION:それは将来的に誰を助けることができる場合私はここに、それを解決し、新しいRestUser.javaある休止@OneToOneマッピング

@RequestMapping(value="/rate", method=RequestMethod.POST) 
public ResponseEntity rate(@RequestBody Rating rating, Principal principal){ 

    User user = userService.findByUsername(principal.getName()); 
    Rating ratingAVG = ratingService.findOne(user.getId()); 
    ratingAVG.setFood(rating.getFood()); 
    ratingAVG.setService(rating.getService()); 
    user.setRating(ratingAVG); 
    ratingAVG.setUser(user); 
    userService.save(user); 

    return new ResponseEntity("Rated!", HttpStatus.OK); 
} 

QUESTION

私はしました外国人のキーを持つオブジェクトを挿入/更新する際の問題です。私はこのような格付けテーブルを持っています。私はprincipal.getName()と現在のuser_idを取る一意の評価オブジェクトを追加したいと思います。私はそれをテストするために高度なRESTクライアントを使用していますし、すでに

+------------------------------------------------+ 
|      Rating      | 
+------------------------------------------------+ 
| id | food  | service  | user_id | 
+----+-------------+----------------+------------+ 
| 1 |  5  |  5  |  1  | 
+----+-------------+----------------+------------+ 

にUser.java

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
@Column(name="Id", nullable=false, updatable=false) 
private long id; 

private String username; 
private String password; 
private String firstName; 
private String lastName; 

@OneToOne(cascade=CascadeType.ALL, mappedBy="user") 
@JoinColumn(name="user_id", unique=true) 
private Rating rating; 

Rating.java

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Long id; 

private int food; 
private int service; 

@OneToOne(cascade = CascadeType.ALL) 
@JsonIgnore 
private User user; 

RatingServiceimpl.java

@Service 
public class RatingServiceImpl implements RatingService { 

    @Autowired 
    private RatingRepository ratingRepository; 

    @Override 
    public Rating save(Rating rating) { 
     return ratingRepository.save(rating); 
    } 

} 
を記録しています

UserRest.java

@RestController 
@RequestMapping("/user") 
public class UserRest { 

    @Autowired 
    UserService userService; 

    @Autowired 
    RatingService ratingService; 


    @RequestMapping(value="/rate", method=RequestMethod.POST) 
    public ResponseEntity rate(@RequestBody Rating rating, Principal principal){ 

     User user = userService.findByUsername(principal.getName()); 
     user.setRating(rating); 
     rating.setUser(user); 
     userService.save(user); 

     return new ResponseEntity("Rated!", HttpStatus.OK); 
    } 

} 

これは私が得るものですが、新しいオブジェクトを追加しますが、既存のオブジェクトを更新したいだけです。

MySQL Browser Screen

ありがとう!

答えて

1

ユーザーの設定で評価を保存しているようです。私はあなたのトランザクションが 'RatingRepository'の内部にあると仮定して、ユーザーに格付けを設定する前にトランザクションがコミットされることを意味するので、 '@トランザクション'注釈は表示されません。

saveを呼び出す前に、ユーザーを評価に設定してみてください。

+0

ありがとうございます!今度は、user_idを取りますが、それでも既存のオブジェクトを置き換えない新しいオブジェクトを追加します。何か案が ? 私はUserRest.javaとイメージを更新しました。 – Damine25

関連する問題