收到错误 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