2017-01-13 58 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);