JPA-HIBERNATE:如何使用带有JPQL的KEY / VALUE语法选择map属性的键/值

时间:2014-02-13 09:14:32

标签: mysql hibernate jpa jpql

我有以下实体与相应的getter / setter:

@Entity
public class Movie {
   @Id@GeneratedValue 
   private int id;
       private String title;   
//getters and setters
}

@Entity
public class VideoStore {

  @Id@GeneratedValue
  private int id;
  private String name;

  @ElementCollection
  @CollectionTable(name="INVENTORY",joinColumns=@JoinColumn(name="STORE_ID"))
  @Column(name="COPIES_IN_STOCK")
  @MapKeyJoinColumn(name="MOVIE",referencedColumnName="ID")
  Map<Movie,Integer>videoInventory;
//getters and setters
}

从主方法我尝试执行以下JPQL查询:

    EntityManagerFactory emf=Persistence.createEntityManagerFactory("Tutorial");
    EntityManager em=emf.createEntityManager();
    String queryMap1 = "SELECT v " +
            "FROM VideoStore v JOIN v.videoInventory m " +
            "WHERE KEY(m) = 1";
    @SuppressWarnings("rawtypes")
    List results= em.createQuery(queryMap1).getResultList();

我收到以下错误:

  

引起:   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本为正确的语法使用附近   第1行的'KEY(videoinven1_.COPIES_IN_STOCK)= 1'

此外,我对包含KEY / VALUE / ENTRY语法的查询的每个变体都会遇到不同类型的错误

我使用JPA与Hibernate和Mysql作为数据库提供者。我找不到这个问题的答案所以我很感激你的帮助。

1 个答案:

答案 0 :(得分:0)

您似乎将KEY(m)Movie)的返回值与数字进行比较。