2017-08-01 11 views
1

私は2つの問題は、私のプロジェクトのフィールドをentityes持っている: まず:Hibernateマッピング省の問題

public class User implements UserDetails { 
    private static final long serialVersionUID = -8442780593066407492L; 
    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinTable(name = "user_role", 
      joinColumns = {@JoinColumn(name = "user_id")}, 
      inverseJoinColumns = {@JoinColumn(name = "role_id")}) 
    private Set<UserRole> userRoles = new HashSet<UserRole>(); 

    @OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE) 
    private Set<CommentReserv> comments = new HashSet<CommentReserv>(); 

    public Collection<? extends GrantedAuthority> getAuthorities() { 
     List<SimpleGrantedAuthority> result = new 
     ArrayList<SimpleGrantedAuthority>(); 
     for (UserRole userRole: userRoles) { 
      result.add(new 
      SimpleGrantedAuthority(userRole.getListRole().name())); 
      } 
     return result; 
    } 
... 
} 

第二:

public class CommentReserv implements Serializable { 
    private static final long serialVersionUID = 1579363480188238317L; 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @ManyToOne 
    @JoinColumn(name = "reservation_id") 
    private Reservation reservation; 

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name = "user_id") 
    private User user; 
... 
} 

サード:

public class Reservation implements Serializable{ 
    private static final long serialVersionUID = -9007238193656173229L; 

    @Id 
    @Column(name = "id") 
    private String id = generateId(); 
... 
    @OneToMany(mappedBy = "reservation", cascade = CascadeType.REMOVE) 
    private Set<CommentReserv> comments = new HashSet<CommentReserv>(); 
... 

その後、私は予約を取得DBからユーザー...

Reservation reservation = this.reservationRepository.getReservationById(params.get("reservationId").toString());    
User currentUser = this.userRepository.getUser(principal.getName()); 

(確認しました。ユーザーが正しく読み込まれています。) 新しいCommentReservインスタンスに設定します。

commentReserv.setReservation(reservation); 
commentReserv.setComment(params.get("comment").toString()); 
commentReserv.setUser(currentUser); 

新しいCommentReservを保存しようとすると、私は自分のDBにユーザーコピーを取得します。 CommentReservからcascadetypeを削除しようとしましたが、TransientObjectExceptionが生成されました。 私のコードで何が問題になっていますか?睡眠のない2番目の夜...

+0

予約コードを共有できますか? –

+0

追加予約コード –

+0

あなたは完全な例外を共有することができます –

答えて

0

私のDBには、id = 0のユーザーが1人います。奇妙ですが、ユーザID = 0の場合、DBにはuserは存在しません。本当に奇妙です。 idを1に変更するだけで、うまく動作します。

関連する問題