小编mso*_*tag的帖子

JPA Criteria API:子类的查询属性

我有这样的类结构:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Article {
   private String aBaseProperty;
}

@Entity
public class Book extends Article {
   private String title;
}

@Entity
public class CartItem {
   @ManyToOne(optional = false)
   public Article article;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容来接收所有CartItems引用a Book的内容title = 'Foo':

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<CartItem> query = builder.createQuery(CartItem.class);
Root<CartItem> root = query.from(CartItem.class);
builder.equal(root.get("article").get("title"), "Foo");
List<CartItem> result = em().createQuery(query).getResultList();
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这将导致错误(对我来说很有意义,因为titleBook,在不Article...):

java.lang.IllegalArgumentException: Could not resolve attribute named title
    at org.hibernate.ejb.criteria.path.SingularAttributePath.locateAttributeInternal(SingularAttributePath.java:101) …

sql polymorphism hibernate jpa criteria

9
推荐指数
1
解决办法
6081
查看次数

标签 统计

criteria ×1

hibernate ×1

jpa ×1

polymorphism ×1

sql ×1