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
Java 如何修复使用@EmbeddedId获取时出现的“无法解析属性:id.element”休眠错误_Java_Hibernate_Orm_Entity_Hibernate Entitymanager - Fatal编程技术网

Java 如何修复使用@EmbeddedId获取时出现的“无法解析属性:id.element”休眠错误

Java 如何修复使用@EmbeddedId获取时出现的“无法解析属性:id.element”休眠错误,java,hibernate,orm,entity,hibernate-entitymanager,Java,Hibernate,Orm,Entity,Hibernate Entitymanager,我有一个方法在查询Hibernate实体列表时抛出下一个错误,同时也使用Join获取OneTONE关系,使子对象具有@EmbeddedId org.springframework.orm.hibernate3.HibernateSystemException:无法解析属性:id.element;嵌套异常为org.hibernate.HibernateException:无法解析属性:id.element 这是查询方法: public List<Element> findAll() {

我有一个方法在查询Hibernate实体列表时抛出下一个错误,同时也使用Join获取OneTONE关系,使子对象具有@EmbeddedId

org.springframework.orm.hibernate3.HibernateSystemException:无法解析属性:id.element;嵌套异常为org.hibernate.HibernateException:无法解析属性:id.element

这是查询方法:

public List<Element> findAll() {
  CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();

  CriteriaQuery<Element> criteriaQuery = criteriaBuilder.createQuery(Element.class);
  Root<Element> root = criteriaQuery.from(Element.class);

  criteriaQuery.select(root).distinct(true);

  root.fetch(Element_.elementSubstitute, JoinType.LEFT);

  return getEntityManager().createQuery(criteriaQuery).getResultList();;
}
如果没有生成的ElementReplacement,则此操作非常有效。同样,类似的方法也适用于其他非嵌入式实体,但这些实体是使用@EmbeddedId映射的,就像这样,这就是为什么我认为是错误的原因

@Entity
@Table(name = "ELEMENT")
public class Element {

        //stuff

        @OneToOne(mappedBy = "id.element", fetch = FetchType.LAZY)
        private ElementSubstitute elementSubstitute;
}

@StaticMetamodel(Element.class)
public class Element_ {

    //stuff

    public static volatile SingularAttribute<Element, ElementSubstitute> elementSubstitute;
}

@Entity
@Table(name = "ELEMENT_SUBSTITUTE")
public class ElementSubstitute {

    @EmbeddedId
    private ElementSubstituteId id = new ElementSubstituteId();

    //stuff
}

@Embeddable
public class ElementSubstituteId {

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_OWNER")
    private Owner owner;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_ELEMENT")
    private Element element;
}
使用getElementSubstitute从单个元素实体获取ElementSubstitute也可以,因此映射没有错误,Hibernate确实能够在需要时识别属性id.Element。为什么在查询上使用联接进行获取时失败