使用Criteria Builder创建条件以查询抽象父类的具体子类的字段

时间:2012-12-04 13:28:54

标签: java jpa-2.0 abstract-class criteria-api single-table-inheritance

我正在处理用户输入文本的要求,我需要在屏幕上显示匹配的数据。

我使用EclipseLink作为JPA提供程序。

以下是代码

@Entity
@Table(name="customer")
public class Customer{
     private List<Address> addresses = new ArrayList<Address>();
 //other code
}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
@Table(name="address")
public abstract class Address{
private String name;

}

@Entity
public class PostalAddress extends Address{
private Contact number;
}

public class Contact{
  private String number;
  public Contact(String number){
  this.number = number;
  }
}    

在DataBase中我有表'地址',其中我有列'name'和'number'。

我想使用CriteriaBuilder创建一个Predicate来搜索表中的特定值。

我尝试过使用

criteriabuiler.like(criteriabuiler.lower(root.join("addresses", JoinType.LEFT).<String>get("number")), searchString));

但它给出了例外

The attribute [msisdn] from the managed type [EntityTypeImpl@27575562:Address] is not present.

你能建议一种方法来实现这个东西吗?

0 个答案:

没有答案