2017-01-13 31 views
0

我有一个实体用户的PropertyAccessException:错误接入领域

@Entity 
public class User implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id", unique = true, nullable = false) 
private Long id; 

    public Long getId() { 
    return id; 
} 
...} 

而且我试图从任务中删除用户与数据库:

@Modifying 
@Query("DELETE FROM Collaborator c WHERE c.user = :userId AND c.task = :taskId") 
void deleteUserFromTask(@Param("userId") Long userId, @Param("taskId") Long taskId); 

,这是用户和协作者之间的关系(我从中删除的表格): 用户

@JsonIgnore 
@OneToMany(mappedBy="user", fetch = FetchType.EAGER) 
private Set<Collaborator> collaborators = new HashSet<>(); 

合作者

@ManyToOne(cascade = {CascadeType.MERGE, 
         CascadeType.DETACH, 
         CascadeType.REFRESH }, 
      fetch = FetchType.EAGER) 
@JoinColumn(name = "UserID", nullable = true) 
private User user; 

,但我得到这个错误:

Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private java.lang.Long gestionprojet.java.entities.beans.User.id] by reflection for persistent property [gestionprojet.java.entities.beans.User#id] : 1 

Hibernate的版本:5.2.6.FINAL

+1

要么更改为c.user.id =:用户id或通过在用户和使用c.user =:用户 –

+0

把它作为答案,我会接受它,谢谢 –

回答

0

你有一个不匹配在你的参数中,即你试着指定一个Long作为Us的参数ER型:

可以使用以下两种方式之一进行更改:

@Query("DELETE FROM Collaborator c WHERE c.user.id = :userId AND c.task.id = :taskId") 
void deleteUserFromTask(@Param("userId") Long userId, @Param("taskId") Long taskId); 

@Query("DELETE FROM Collaborator c WHERE c.user = :user AND c.task = :task") 
void deleteUserFromTask(@Param("user") User user, @Param("task") Task task);