首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate : org.hibernate.QueryException

Hibernate : org.hibernate.QueryException
EN

Stack Overflow用户
提问于 2018-11-15 15:28:42
回答 3查看 201关注 0票数 1

我有一个org.hibernate.QueryException,我很难理解为什么。

hibernate未解析的属性langue_id是在“我的实体条件”中定义的。

StackTrace

代码语言:javascript
运行
复制
Caused by: org.hibernate.QueryException: could not resolve property: langue_id of: fr.sita.g2fm.domain.referentiel.Conditionnement
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:56) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1805) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.criteria.EntityCriteriaInfoProvider.getType(EntityCriteriaInfoProvider.java:39) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathInfo(CriteriaQueryTranslator.java:228) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:212) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.<init>(CriteriaQueryTranslator.java:94) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:71) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1760) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]

实体

代码语言:javascript
运行
复制
@Entity
@Data
@Table(uniqueConstraints = @UniqueConstraint(name = "UNIQUE_CONDITIONNEMENT_DESIGNATION", columnNames = {
        "designation"}))
public class Conditionnement implements IdObject, Serializable {
  private static final long serialVersionUID = 7096113289274101792L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private Long codeConditionnement;

  @NotNull(message = ERROR_CODE_MANDATORY_FIELD)
  private String designation;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "langue_id")
  @NotNull(message = ERROR_CODE_MANDATORY_FIELD)
  @ForeignKey(name = "FK_CONDITIONNEMENT_LANGUE")
  private Langue langue;
}

终于在我的DAO中找到了方法

代码语言:javascript
运行
复制
  @Override
  public List<Conditionnement> find(ConditionnementCriteria conditionnementCriteria) {
    Criteria criteria = getHibernateSession().createCriteria(Conditionnement.class, "c");
    criteria.createCriteria("c.langue_id", "l", JoinType.LEFT_OUTER_JOIN);

    return criteria.list();
  }

你知道是什么导致了这个异常吗?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-16 07:25:06

例外情况很简单,因为它说:

由: org.hibernate.QueryException:未能解析属性: langue_id of: langue_id引起

所以问题是Hibernate无法在Conditionnement实体中找到属性langue_id,这是因为Hibernate是一个 framework,因此它处理的是objects/entities而不是tables,所以它将查找类properties,而不是表columns

在你的实体里,你有:

代码语言:javascript
运行
复制
private Langue langue;

因此,您需要有以下查询:

代码语言:javascript
运行
复制
@Override
public List<Conditionnement> find(ConditionnementCriteria conditionnementCriteria) {
    Criteria criteria = getHibernateSession().createCriteria(Conditionnement.class, "c");
    criteria.createCriteria("c.langue", "l", JoinType.LEFT_OUTER_JOIN);
    return criteria.list();
}
票数 1
EN

Stack Overflow用户

发布于 2018-11-16 05:32:11

c.langue_id更改为c.langue,如下所示,hibernate无法找到名称为langue_id的列。

代码语言:javascript
运行
复制
public List<Conditionnement> find(ConditionnementCriteria conditionnementCriteria) {
    Criteria criteria = getHibernateSession().createCriteria(Conditionnement.class, "c");
    criteria.createCriteria("c.langue", "l", JoinType.LEFT_OUTER_JOIN);

    return criteria.list();
  }
票数 2
EN

Stack Overflow用户

发布于 2018-11-16 07:09:58

问题是hibernate在Conditionnement中找不到列Conditionnement的映射,尽管表中有列。您应该将c.langue_id更改为c.langue

代码语言:javascript
运行
复制
public List<Conditionnement> find(ConditionnementCriteria conditionnementCriteria) {
    Criteria criteria = getHibernateSession().createCriteria(Conditionnement.class, "c");
    criteria.createCriteria("c.langue", "l", JoinType.LEFT_OUTER_JOIN);

    return criteria.list();
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53322717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档