Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何使用JPA标准查询搜索子类属性?_Hibernate_Jpa 2.0_Criteria Api - Fatal编程技术网

Hibernate 如何使用JPA标准查询搜索子类属性?

Hibernate 如何使用JPA标准查询搜索子类属性?,hibernate,jpa-2.0,criteria-api,Hibernate,Jpa 2.0,Criteria Api,我试图编写一个查询来搜索不在其超类中的子类属性,并返回该超类的所有对象。目前,当我尝试执行person.get(“specialAttribute”)时,我得到一个NullPointerException 继承(策略=InheritanceType.JOINED) @实体 公共抽象类人物{ 公共字符串searchable属性; } @实体 @表(name=“普通人”) 公共类NormalPerson扩展Person{ } @实体 @表(name=“特殊人员”) 公共类SpecialPerson扩

我试图编写一个查询来搜索不在其超类中的子类属性,并返回该超类的所有对象。目前,当我尝试执行person.get(“specialAttribute”)时,我得到一个NullPointerException

继承(策略=InheritanceType.JOINED) @实体 公共抽象类人物{ 公共字符串searchable属性; } @实体 @表(name=“普通人”) 公共类NormalPerson扩展Person{ } @实体 @表(name=“特殊人员”) 公共类SpecialPerson扩展个人{ @列(nullable=false,unique=true) 公共字符串特别属性; } //控制器方法 Root person=query.from(person.class); 请问,在哪里( 建筑商( 建筑商喜欢(person.get(“specialAttribute”),“foo”), builder.like(person.get(“searchableAttribute”),“foo”) ) );
根据提供的提示解决了我自己的问题

Root person=query.from(person.class);
Subquery Subquery=query.Subquery(SpecialPerson.class);
Root specialPersonRoot=子查询.from(SpecialPerson.class);
subQuery.select(specialPersonRoot);
其中(builder.like(specialPersonRoot.get(“specialAttribute”),“foo”);
请问,在哪里(
建筑商(
builder.in(person).value(子查询)
builder.like(person.get(“searchableAttribute”),“foo”)
)
);
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
public abstract class Person {
    public String searchableAttribute;
}

@Entity
@Table( name = "normal_person" )
public class NormalPerson extends Person {

}

@Entity
@Table( name = "special_person" )
public class SpecialPerson extends Person {
    @Column(nullable = false, unique = true)
    public String specialAttribute;
}

// Controller method

    Root<Person> person = query.from(Person.class);
    query.where(
            builder.or(
                    builder.like(person.<String>get("specialAttribute"), "foo"),
                    builder.like(person.<String>get("searchableAttribute"), "foo")
            )
    );
Root<Person> person = query.from(Person.class);

Subquery<SpecialPerson> subQuery = query.subquery(SpecialPerson.class);
Root<SpecialPerson> specialPersonRoot = subQuery.from(SpecialPerson.class);

subQuery.select(specialPersonRoot);
subQuery.where(builder.like(specialPersonRoot.<String>get("specialAttribute"), "foo"));

query.where(
        builder.or(
                builder.in(person).value(subQuery)
                builder.like(person.<String>get("searchableAttribute"), "foo")
        )
);