0

EclipseLink-JPA2 を使用して動的クエリを作成しようとしています。以下のサンプルコード:

TypedQuery query = getEntityManager().createQuery("UPDATE Employee e SET e.employeeStatus.code = :statusCode WHERE e.employeeId = :employeeId", Employee.class);

以下のEmployeeBean:

@Entity
@Table(name = "employee", uniqueConstraints = {
@UniqueConstraint(columnNames = {"employee_id"})})
@XmlRootElement
public class Employee implements Serializable {
@Id 
@Basic(optional = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employee_id", nullable = false)
private Integer employeeId;    
@JoinColumn(name = "employee_status", referencedColumnName = "code", nullable = false)
@ManyToOne(optional = false)
private EmployeeStatus employeeStatus;

//Other fields here

public EmployeeStatus getEmployeeStatus() {
    return employeeStatus;
}
public void setEmployeeStatus(EmployeeStatus employeeStatus) {
    this.employeeStatus = employeeStatus;
}
//Other getters-setters here

}

以下の EmployeeStatus Bean:

@Entity
@Table(name = "employee_status")
@XmlRootElement

public class EmployeeStatus implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "code", nullable = false)
private Integer code;
@Column(name = "descr", length = 32)
private String descr;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employeeStatus")
private List<Employee> employeeList;

//Other fields here

@XmlTransient
public List<Employee> getEmployeeList() {
    return employeeList;
}
public void setEmployeeList(List<Employee> employeeList) {
    this.employeeList = employeeList;
}
//Other getters-setters here

}

実行時に、上記の行の実行中に次のエラーが発生します。

クエリの無効なナビゲーション式 [e.employeeStatus] のコンパイル中にエラーが発生しました。SET 句のターゲットの関連付けフィールド [employeeStatus] をナビゲートできません。

なぜこうなった?単純な列(String、int ..)を更新しようとすると、オブジェクト型ではなく正常に実行されます。エンティティ Bean 内にプロパティを設定する必要はありますか?

4

0 に答える 0