Google app engine 在带有GAE的JPQL中的状态

Google app engine 在带有GAE的JPQL中的状态,google-app-engine,jpa,jpql,Google App Engine,Jpa,Jpql,我尝试将JPA与GAE结合使用,但我遇到了下一个问题: 执行此查询时: select x From Advert x where x.advertType in (15) 或 实体管理器在两种情况下都返回一个实体 但当我试图执行 select x From Advert x where x.advertType in (15,20) 鲁恩斯零实体 这是我的映射: @Entity public class Advert extends DomainObject implements Compa

我尝试将JPA与GAE结合使用,但我遇到了下一个问题:

执行此查询时:

select x From Advert x where x.advertType in (15)

实体管理器在两种情况下都返回一个实体 但当我试图执行

select x From Advert x where x.advertType in (15,20)
鲁恩斯零实体

这是我的映射:

@Entity
public class Advert extends DomainObject implements Comparable<Advert> {
    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    @Unowned
    private AdvertType advertType;
    ...
}

@Entity
public class AdvertType extends DomainObject implements Comparable<AdvertType> {
    private Integer position;
    private String typeId;
    private String titleMain;
}

@Entity
@MappedSuperclass
public abstract class DomainObject implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;
}
那么,为什么要将查询编译为:

AdertType_key=AdertType(15)AdertType_key=AdertType(20)

而不是


您的查询有缺陷。“x.advertType”属于advertType类型,因此它不能“在”数字列表中。如果在字符串列表中,则可能使用“x.advertType.typeId”。此外,日志还告诉您实际调用了什么低级查询

Hi-thx进行应答。我添加了日志中最有趣的部分并更正了这个问题。我引用的是可移植的有效JPQL。编写可移植的JPQL是可能的,而不是Google特别关心的东西
@Entity
public class Advert extends DomainObject implements Comparable<Advert> {
    @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    @Unowned
    private AdvertType advertType;
    ...
}

@Entity
public class AdvertType extends DomainObject implements Comparable<AdvertType> {
    private Integer position;
    private String typeId;
    private String titleMain;
}

@Entity
@MappedSuperclass
public abstract class DomainObject implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Key key;
}
2013-04-20 12:48:17 DEBUG Query:58 - QueryCompilation:
  [from:ClassExpression(alias=x)]
  [filter:DyadicExpression{DyadicExpression{PrimaryExpression{x.advertType}  =  Literal{15}}  OR  DyadicExpression{PrimaryExpression{x.advertType}  =  Literal{20}}}]
  [symbols: x type=net.org.selector.animals.domain.Advert]
2013-04-20 12:48:17 DEBUG Query:58 - JPQL Query : Executing "SELECT x FROM Advert x WHERE x.advertType in (15,20)" ...
2013-04-20 12:48:17 DEBUG Query:58 - Query compiled as : Kind=net.org.selector.animals.domain.Advert Filter : advertType_key=AdvertType(15) AND advertType_key=AdvertType(20) [QUERY-TYPE=NORMAL]
2013-04-20 12:48:17 DEBUG Native:58 - Executing query in datastore for SELECT x FROM Advert x WHERE x.advertType in (15,20)