当前位置: 首页 > 知识库问答 >
问题:

条件API联接:java.lang.IllegalArgumentException:无法解析属性

怀宇
2023-03-14

我试图通过jpa标准api进行一个简单的连接操作,但我得到了一个错误:

java.lang.IllegalArgumentException:无法针对路径解析属性[Company](位于org.hibernate.ejb.Criteria.path.AbstractPathimpl.java.Unknownatribute(AbstractPathimpl.java:120)(位于org.hibernate.ejb.Criteria.path.AbstractPathimpl.LocateAttribute(AbstractPathimpl.java:229)(位于org.hibernate.ejb.Criteria.path.AbstractFromimpl.join(WorkMethod.InvokeExplory(FrameworkMethod.Java:47)在org.junit.Internal.Runners.Statements.InvokeMethod.Evalue(InvokeMethod.Java:17)在org.junit.Runners.ParentRunner.Runleaf(ParentRunner.Java:325)在.Java:211)在com.intellij.rt.execution.junit.junitstarter.main(junitstarter.Java:67)在sun.reflect.nativeMethodAccessorInvoke0(本机方法)在sun.reflect.nativeMethodAccessorInvoke.Java:62)在com.intellij.rt.execution.application.appmain.main(appmain.Java:134)

方法类似于:

    public List findAllWithCompaniesByCriteria() {

    EntityManager em = EMgrUtil.createEntityManager();

    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Object[]> query = builder.createQuery(Object[].class);

    Metamodel m = em.getMetamodel();

    EntityType<Services> Services_ = m.entity(Services.class);
    EntityType<Companies> Companies_ = m.entity(Companies.class);

    /*Root<Services> services = query.from(Services.class);
    Join<Services, Companies> companies = query.join(Companies_);*/

    Root<Services> s = query.from(Services.class);
    Join<Services, Companies> c = s.join("Companies", JoinType.INNER);
    query.multiselect(s.get("avatar"), c.get("name"));

    List<Object[]> list = em.createQuery(query).getResultList();

    return list;

}

我们必须连接的表的名称是“zaks_companies”,这两种情况的错误都是一样的。

@Entity
@Table(name = "zaks_services")
public class Services {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@Column(name = "title", nullable = false)
@Size(min = 0, max = 255)
private String title;

//@Column(name = "descr", length = 65535, columnDefinition = "Text")
//@Column(name = "descr", length = 4294967295, columnDefinition = "Longtext")
@Column(name = "descr", nullable = false, length = 16777215, columnDefinition = "Mediumtext")
private String descr;

@Column(name = "avatar", nullable = false)
private String avatar;

@Column(name = "date_add", nullable = false, insertable = false, updatable = false, columnDefinition = "Datetime DEFAULT CURRENT_TIMESTAMP")
@Temporal(TemporalType.TIMESTAMP)
private Date date_add;

@OneToOne
@JoinColumn(name = "company_id")
private Companies companies;

...getters/setters
...default constructor

和公司模型:

@Entity
@Table(name = "zaks_companies")
public class Companies {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@OneToOne(mappedBy = "companies")
private Services services;

@Column(name = "name", nullable = false)
@Size(min = 0, max = 255)
private String name;

...getters/setters
...default constructor

我的一本手册在这里:https://www.youtube.com/watch?v=j-F4jvljpgq在16:50

共有1个答案

汤跃
2023-03-14

这是因为持久属性的名称区分大小写。在本例中,持久属性的名称为company:

private Companies companies;

但query尝试使用companies:

Join<Services, Companies> c = s.join("Companies", JoinType.INNER);

在join中,应使用companies,如下所示:

Join<Services, Companies> c = s.join("companies", JoinType.INNER);
 类似资料:
  • 问题内容: 我在使用hibernate标准时遇到问题。我正在尝试制定一个条件,在其中查看查询返回的类的成员对象的ID。 例如: 结果是一个例外: 该班确实包含讲座变量,又包含了admin变量。我尝试过使用,效果很好。 这样的对象层次结构可以限制的级别数是否有限制? 谢谢! 代码段: “用户”类扩展了该类,该类又扩展了一个类,该类具有以下方法: 从Hibernate映射XML: 这是表: 问题答案:

  • 问题内容: 我正在使用Hibernate 从表的列中获取值。 但是当我得到结果时,它会引发异常 org.hibernate.QueryException:无法解析属性:com.contaque.hibernateTableMappings.contaque_recording_log的文件名 我的食用豆是: 我从那里获取hibernate-session的hibernateUtil类: 我从表中获

  • 我到处找,找不到我问题的答案。所以我想要一个只在特定条件下显示的条件属性,例如: 如您所见,我只想在等于默认值时指示按钮处于活动状态。然而,我得到了意想不到的令牌,错误... 但当我尝试将属性放在前面时,例如: 它传递语法错误并显示良好,但这不是我想要实现的。 我怎样才能解决这个问题?它没有通过的原因是什么? 因此,我刚刚发现在中,属性是的缩写,因此我使用 所以如果有人遇到这个问题,我就把它留在这

  • 我看到下面的错误,当我试图读取属性从类路径在我的Spring项目中使用的@属性源注释。我已经粘贴了我的代码下面,请你帮助让我知道我错过了什么?谢谢。 警告:在上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanCreation异常:创建名称为“客户仓库”的bean时出错:自动构建依赖项注入失败;嵌套异常java.lang.Illega

  • 问题内容: 因此,我有一个表,已将其定义为hibernate状态,如下所示: 当我尝试针对此表编写一个简单查询时: 我收到以下错误: 为什么不能hibernate找出类上的dbgroupid? 问题答案: 可能是因为您的getter(和setter)没有遵循javabeans约定。它应该是: 我的建议是-命名字段,然后使用IDE生成设置器和获取器。它将遵循惯例。(另一件事,这是一个偏好问题,但我认

  • 问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。