java - 命名查询子选择中的 HQL 错误

标签 java hibernate jpa hql

此 HQL 会产生非常有用的“命名查询中的错误”消息

    "FROM courseform c WHERE c.application.application IN 
(SELECT a.application FROM application a WHERE a.applicant=: applicant)"

CourseForm 与应用程序具有 OneToOne 单向关系(如果有帮助的话,可以将其设为双向关系)。反过来,应用程序与申请人具有相同的单向一对一关系。一个申请人可以有多个申请。

这是(删节的)定义

类(class)表

@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() {
    }

最佳答案

好吧,根据马克的说法,正确答案是

 FROM courseform c WHERE c.application.applicant =: applicant

关于java - 命名查询子选择中的 HQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695176/

相关文章:

java - 将 Grains 添加到现有项目

mysql - 表名变为大写

java - 如何在单元测试期间注入(inject) PersistenceContext?

java - EntityManager JNDI 查找

java - HibernateUtil的作用是什么?

java - @embeddable 与 @entity 用于映射集合

java - 是什么导致了这个 SQLException?

java - 使用java获取linux终端的输出?

java - 如何将 'public int' 合并到 actionPerformed 按钮中?

Hibernate Restrictions.in 与 Disjunction