首页 > 解决方案 > 使用联接时无法在此 ManagedType 上找到具有给定名称的属性

问题描述

我在执行连接时遇到问题,然后是涉及 JPA 中 where 的查询。在过去的 6 个小时里,我一直试图找出问题所在,但无济于事。

 float max_price = 3;
 CriteriaQuery<Browar> cb = em.getCriteriaBuilder().createQuery(Browar.class);
 Root<Browar> br = cb.from(Browar.class);
 Join<Browar,Piwo> j = br.join("piwa");
 ParameterExpression<Float> p = em.getCriteriaBuilder().parameter(Float.class);
 cb.multiselect(j,br);
 cb.where(em.getCriteriaBuilder().le(j.get("cena"), p));
 cb.distinct(true);
 TypedQuery<Browar> q = em.createQuery(cb);
 q.setParameter(p,max_price);
 List<Browar> bl = q.getResultList();

代码抛出

java.lang.IllegalArgumentException:无法在 org.hibernate.metamodel.model.domain.internal.AbstractManagedType.checkNotNull(AbstractManagedType.java :148) 在 org.hibernate.metamodel.model.domain.internal.AbstractManagedType.getAttribute(AbstractManagedType.java:119) 在 org.hibernate.metamodel.model.domain.internal.AbstractManagedType.getAttribute(AbstractManagedType.java:44) 在org.hibernate.query.criteria.internal.path.Abs​​tractFromImpl.locateAttributeInternal(AbstractFromImpl.java:111) 在 org.hibernate.query.criteria.internal.path.Abs​​tractPathImpl.locateAttribute(AbstractPathImpl.java:204) 在 org.hibernate。在 local.kamilsuchecki.mavenproject1 的 query.criteria.internal.path.Abs​​tractPathImpl.get(AbstractPathImpl.java:177)。JavaApplication1.main(JavaApplication1.java:169)

cb.where(em.getCriteriaBuilder().le(j.get("cena"), p));

当我尝试使用时会出现类似的问题

em.createQuery("SELECT DISTINCT e FROM Browar e JOIN e.piwa aboslutley_not_browar WHERE aboslutley_not_browar.cena <= :p").setParameter("p",max_price).getResultList();

java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:cena:local.kamilsuchecki.mavenproject1.Browar [SELECT DISTINCT e FROM local.kamilsuchecki.mavenproject1.Browar e JOIN e.piwa aboslutley_not_browar WHERE aboslutley_not_browar.cena < =:p] 在 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) 在 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) 在 org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl .java:188) 在 org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) 在 local.kamilsuchecki.mavenproject1.JavaApplication1.main( JavaApplication1.java:175)

我在想我的实体类可能有问题,在这种情况下我也包括这些

@Getter
@Setter
@NoArgsConstructor
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@ToString
@Builder
@Entity
public class Browar implements Serializable {
    @Getter
    @Setter
    @Id 
    private String name;
    @Getter
    @Setter
    private long wartosc; 

    @Getter
    @Setter
    @OneToMany(cascade = CascadeType.ALL)
    private List<Browar> piwa;
}



@NoArgsConstructor
@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@ToString
@Entity
public class Piwo implements Serializable {
    @Getter
    @Setter
    @Id 
    private String name;

    @Getter
    @Setter
    private float cena;

    @Getter
    @Setter
    @ManyToOne(cascade = CascadeType.ALL)
    private Browar browar;
}

标签: javahibernatejpa

解决方案


推荐阅读