這HQL導致極大幫助的「錯誤命名查詢」消息HQL錯誤命名查詢子查詢
"FROM courseform c WHERE c.application.application IN
(SELECT a.application FROM application a WHERE a.applicant=: applicant)"
的CourseForm具有與該應用程序OneToOne單向關係(如果它會這個可能就是雙向的幫幫我)。反過來,申請人與申請人具有相同的單向OneToOne關係。一個申請人可以有很多申請。
下面是(刪節)定義
CourseForm
@Entity
@NamedQueries({
@NamedQuery(name = "CourseForm.findByApplicant",
query = "FROM courseform c WHERE c.application.application IN
(SELECT a.application FROM application a WHERE a.applicant=: applicant)") })
public class CourseForm implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
@Enumerated(EnumType.STRING)
private Career career;
private String academicPlan;
private String courseName;
@Enumerated(EnumType.STRING)
private ModeOfAttendance modeOfAttendance;
@OneToOne
@JoinColumn(name = "application_fk")
private Application application;
...
}
應用
@Entity
public class Application implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long applicationNumber;
@OneToOne
@JoinColumn(name = "applicant_fk")
private Applicant applicant;
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
private LocalDateTime lastUpdate = LocalDateTime.now();
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
private LocalDateTime submitted = null;
public Application() {
}
申請人
@Entity
@NamedQueries({ @NamedQuery(name = "Applicant.findByApplicantID",
query = "FROM Applicant a WHERE a.applicantID= :applicantID") })
public class Applicant implements Serializable {
private static final long serialVersionUID = -7210042752148566673L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long id;
private String applicantID;
Applicant() {
}
我也引用了CourseForm到應用程序關係中的列名稱,並且向Applicant申請了一個ManyToOne關係,也引用了列名。 –