java - 使用联接时无法在此 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.AbstractFromImpl.locateAttributeInternal(AbstractFromImpl.java:111) 在 org.hibernate.query.criteria.internal.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:204) 在 org.hibernate。在 local.kamilsuchecki.mavenproject1 的 query.criteria.internal.path.AbstractPathImpl.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;
}
解决方案
推荐阅读
- java - Java中的Lambda:查找重复的id并抛出异常
- c# - 未保存 Powerpoint 图表数据
- python - 读取文件,如何只选择以整数开头的行?
- google-sheets - Google Drive 错误:抱歉,目前无法打开文件。请检查地址并再试一次。(谷歌表格)
- typescript - Chart.js 不显示
- c# - c#在图表区域外放置注释
- api - Cowin API 可以实时访问吗?
- html - 如何在html和css中获得相同高度的所有列
- jersey - 应用程序/Json 在 MultipartEntityBuilder 中转换为文本/纯文本
- python - 赋值前引用的局部变量“pts”