收到错误 org.hibernate.QueryException:非法尝试取消引用集合

Getting error org.hibernate.QueryException: illegal attempt to dereference collection

我有一个评论class,其中有很多员工。

Review.java中的关联是

    @ManyToMany(targetEntity = Employee.class, cascade = { CascadeType.ALL })
    @JoinTable(name = "review_employee", 
            joinColumns = { @JoinColumn(name = "reviewid") }, 
            inverseJoinColumns = { @JoinColumn(name = "empid") })
    private Set<Employee> employees;

当我尝试从 Review 访问员工时,出现以下错误

   org.hibernate.QueryException: illegal attempt to dereference collection [review0_.id.employees] with element property reference [id] [FROM com.abc.model.Review r  LEFT JOIN fetch r.employees WHERE r.id = 1 AND ( r.employees.id = 11 )]
   org.hibernate.QueryException.generateQueryException(QueryException.java:137)

感谢您的帮助。


更新

Employee.java

public class Employee  {
/**
 * 
 */
private static final long serialVersionUID = 1L;

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

@Column(name = "empfirstname", nullable = false)
private String empFirstName;

@Column(name = "emplastname", nullable = false)
private String empLastName;

@Column(name = "empdesignation", nullable = false)
private String empDesignation;

@OneToOne
@JoinColumn(name = "employeetypeid", nullable = true)
private EmployeeType employeeType;

@Column(name = "employeeImageFileName", nullable = false)
private String employeeImageFileName;

private Boolean deleted;

...Getters & Setters...
}

Review.java

public class Review {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToMany(targetEntity = Employee.class, cascade = { CascadeType.ALL })
@JoinTable(name = "review_employee", 
            joinColumns = { @JoinColumn(name = "reviewid") }, 
            inverseJoinColumns = { @JoinColumn(name = "empid") })
private Set<Employee> employees;

@Column(name = "customerfirstname", nullable = false)
private String customerFirstName; 

@Column(name = "customerlastname", nullable = false)
private String customerLastName;

@OneToOne
@JoinColumn(name = "starratingid", nullable = false)
private StarRating starRating;

@Column(name = "reviewtitle", nullable = false)
private String reviewTitle;

@Column(name = "review", nullable = false)
@Type(type="text")
private String review;

 ...Getters & Setters...
}

您的以下查询

 FROM com.abc.model.Review r LEFT JOIN fetch r.employees WHERE r.id = 1 AND ( r.employees.id = 11 )

应该这样修改

FROM com.abc.model.Review r LEFT JOIN fetch r.employees emp WHERE r.id = 1 AND ( emp.id = 11 )

您能否尝试引用来自 JOIN 员工的员工而不是 Reviews 员工。试试这个:

FROM com.abc.model.Review r LEFT JOIN fetch r.employees reviewEmp WHERE r.id = 1 AND reviewEmp.id = 11