我有一个org.hibernate.QueryException,我很难理解为什么。
hibernate未解析的属性langue_id是在“我的实体条件”中定义的。
StackTrace
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]实体
@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中找到了方法
@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();
}你知道是什么导致了这个异常吗?
谢谢你的帮助。
发布于 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。
在你的实体里,你有:
private Langue langue;因此,您需要有以下查询:
@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();
}发布于 2018-11-16 05:32:11
将c.langue_id更改为c.langue,如下所示,hibernate无法找到名称为langue_id的列。
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();
}发布于 2018-11-16 07:09:58
问题是hibernate在Conditionnement中找不到列Conditionnement的映射,尽管表中有列。您应该将c.langue_id更改为c.langue
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();
}https://stackoverflow.com/questions/53322717
复制相似问题