Hibernate 使用JPQL的MySQLSyntaxErrorException;式中,类型(x)=x“;

Hibernate 使用JPQL的MySQLSyntaxErrorException;式中,类型(x)=x“;,hibernate,jpql,Hibernate,Jpql,我有一个抽象的兽医课程: @Entity @Table(name = "vet") @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "vet_type") public abstract class Vet implements Serializable { @Id @Column(name = "vet_id")

我有一个抽象的兽医课程:

    @Entity
    @Table(name = "vet")
    @Inheritance(strategy = InheritanceType.JOINED)
    @DiscriminatorColumn(name = "vet_type")
    public abstract class Vet implements Serializable {

      @Id
      @Column(name = "vet_id")
      @TableGenerator(name = "idGenTable", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_value", pkColumnValue = "vet_id_gen", initialValue = 1)
      @GeneratedValue(generator = "idGenTable")
      private Integer id;

      ...
    }
然后这两个扩展类,
InHouseVet
ExternalVet

@Entity
@Table(name = "in_house_vet")
@DiscriminatorValue("in_vet")
public class InHouseVet extends Vet {
  ...
}

@Entity
@Table(name = "external_vet")
@DiscriminatorValue("ext_vet")
public class ExternalVet extends Vet {
   ...
}
Query query = em.createQuery("SELECT v FROM Vet v WHERE TYPE(v) = InHouseVet");
List<Vet> vets = query.getResultList();
以及仅获取InHouseVet中的
的查询:

@Entity
@Table(name = "in_house_vet")
@DiscriminatorValue("in_vet")
public class InHouseVet extends Vet {
  ...
}

@Entity
@Table(name = "external_vet")
@DiscriminatorValue("ext_vet")
public class ExternalVet extends Vet {
   ...
}
Query query = em.createQuery("SELECT v FROM Vet v WHERE TYPE(v) = InHouseVet");
List<Vet> vets = query.getResultList();
Query Query=em.createQuery(“从Vet v中选择v,其中类型(v)=InHouseVet”);
List vets=query.getResultList();
这导致

原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: “where子句”中的未知列“ext_vet”


有人能看到这里出了什么问题吗?

从上面的代码片段中,Hibernate(版本4.3.7最终版)生成以下内容。。(注意第1和第2 when条款中缺少的引号)


据报道,这是一个严重的问题

请您详细说明本准则的目的以及您的期望是什么?谢谢;)您好,Casper,我正在尝试使用WHERE TYPE子句进行查询(而不是直接从InHouseVet中选择)。我期望的是一个InHouseVet类型的Vet列表。您能发布正在执行的实际SQL查询吗?