2017-08-01 98 views
1

我有两个问题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,我得到用户拷贝在我的数据库。 我尝试从CommentReserv中删除cascadetype,但它产生TransientObjectException。 我的代码有什么问题?第二晚没有睡觉...

+0

你能分享预订代码吗? –

+0

已添加预订代码 –

+0

您能分享完整的例外 –

回答

0

在我的数据库中我有一个id = 0的用户。这很奇怪,但休眠假设,如果用户id = 0,那么用户不存在于数据库中。真奇怪。我只是将ID更改为1,它工作正常。