Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Java 在JPA标准查询中使用@Embeddeble实体_Java_Jpa_Criteria_Openjpa_Criteria Api - Fatal编程技术网

Java 在JPA标准查询中使用@Embeddeble实体

Java 在JPA标准查询中使用@Embeddeble实体,java,jpa,criteria,openjpa,criteria-api,Java,Jpa,Criteria,Openjpa,Criteria Api,假设我有以下示例实体-一个是@embeddeble,嵌入另一个@Entity: @Embeddable public class ContactInfoEntity { @Column private String phone; @Column private String zipCode; } @Entity @Table(name = "EMPLOYEE") public class EmployeeEntity { @Id @Colu

假设我有以下示例实体-一个是
@embeddeble
,嵌入另一个
@Entity

@Embeddable
public class ContactInfoEntity {

    @Column
    private String phone;

    @Column
    private String zipCode;
}

@Entity
@Table(name = "EMPLOYEE")
public class EmployeeEntity {

    @Id
    @Column(name = "EMPLOYEE_ID")
    private Long employeeId;

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name = "phone",
                           column = @Column(name = "EMPLOYEE_PHONE")),
        @AttributeOverride(name = "zipCode",
                           column = @Column(name = "EMPLOYEE_ZIP_CODE"))
    })
    private ContactInfoEntity employeeContactInfo;
}
openjpa maven插件生成的元模型类只包含
employeeContactInfo
变量,而不包含
@AttributeOverride

现在假设我想这样做:

选择
EMPLOYEE\u ID
EMPLOYEE\u PHONE
,其中
EMPLOYEE\u邮政编码等于“123456”

如何将其创建为标准查询

CriteriaBuilder cb = entityManager.getCriteriaBuilder();

CriteriaQuery<String> qDef = cb.createQuery(String.class);
Root<EmployeeEntity> e = qDef.from(EmployeeEntity.class);
qDef.select(e.get(EmployeeEntity_.employeeId),
            e.get(????))
    .where(cb.equal(e.get(????), "123456"));

return entityManager.createQuery(qDef).getResultList();
CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery qDef=cb.createQuery(String.class);
根e=qDef.from(EmployeeEntity.class);
qDef.select(e.get(EmployeeEntity_u2;employeeId),
e、 获得(??)
式中(cb.equal(e.get(??),“123456”);
返回entityManager.createQuery(qDef.getResultList();

示例方法可能如下所示:

CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery qDef=cb.createQuery(对象[].class);
根e=qDef.from(EmployeeEntity.class);
qDef.multiselect(
e、 获取(EmployeeEntity_u2;employeeId),
e、 get(EmployeeEntity_u.employeeContactInfo).get(ContactInfoEntity_u.phone));
qDef.where(
cb.equal(
e、 get(EmployeeEntity_u.employeeContactInfo).get(ContactInfoEntity_u.zipCode),
cb.文字(“123456”);
List objects=em.createQuery(qDef).getResultList();
for(对象[]元素:对象){
System.out.format(“%d%s”,元素[0],元素[1]);
}

根据您的偏好,您可能还希望获得以下查询结果:

  • 构造函数表达式

    公共类EmployeeEntityResult{
    私有int-id;
    私人电话;
    public EmployeeEntityResult(整数id,字符串电话){
    this.id=id;
    this.phone=电话;
    }
    ...
    }
    
    CriteriaQuery cq=cb.createQuery(EmployeeEntityResult.class);
    ...
    List result=em.createQuery(cq.getResultList();
    for(EmployeeEntityResult元素:结果){
    System.out.format(“%d%s”,element.getId(),element.getPhone());
    }
    
  • 元组

    CriteriaQuery cq=cb.createTupleQuery();
    ...
    选择(
    元组(
    e、 获取(EmployeeEntity_u2;.employeeId)
    .别名(“id”),
    e、 获取(EmployeeEntity.employeeContactInfo).get(ContactInfoEntity.phone)
    .别名(“电话”);
    ...
    List tuple=em.createQuery(cq.getResultList();
    for(元组元素:元组){
    System.out.format(“%d%s”,element.get(“id”),element.get(“phone”);
    }
    

JPQL查询如下所示:

选择e.id,e.employeeContactInfo.phone
来自雇员实体e
其中e.employeeContactInfo.zipCode='123456'

ContactInfoEntity
EmployeeEntity
有何关联?
ResourceNodeEntity
是否应该替换为
ContactInfoEntity
?@wypiperz假装您从未见过:)复制粘贴输入错误泄漏到示例代码中。固定的!