Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Hibernate条件获取两个对象的属性_Hibernate_Hibernate Criteria - Fatal编程技术网

使用Hibernate条件获取两个对象的属性

使用Hibernate条件获取两个对象的属性,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,使用Criteria API运行查询时获取异常 org.hibernate.QueryException: could not resolve property: com of: com.data.Collage at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44) at org.hibernate.persi

使用Criteria API运行查询时获取异常

 org.hibernate.QueryException: could not resolve property: com of: com.data.Collage        at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
    at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1362)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathEntityName(CriteriaQueryTranslator.java:204)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:191)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.<init>(CriteriaQueryTranslator.java:81)
    at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:58)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
我们已经完成了上述类的映射

现在我正试图在一个查询中获取collageID和StudentID中的collage name和student name。已为此使用标准API

Criteria cr = session.createCriteria("com.data.Collage","collageAlias");
cr.createAlias("com.data.Student","studentAlias");
cr.add(Restrictions.eq("collageAlias.id", "402882c2369bc53901369bc95d5f0137"));
cr.add(Restrictions.eq("studentAlias.id","ff80808134cbe5a10134d14ff20300a9"));

ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("collageAlias.collageName"));
properties.add(Projections.property("studentAlias.studentName"));

cr.setProjection(properties);
List collage_student = cr.list();
我尝试了Collage.class,删除了Collage的别名,作为t的criteria API的默认类,但它不起作用

有什么建议吗?

什么时候有

cr.createAlias("com.data.Student","studentAlias");
Hibernate自动认为Student是
拼贴
类的一个字段,因为标准是建立在该类的基础上的。通过创建别名,可以自动对该特定实体进行连接

由于您的
拼贴
类没有名为“com.data.Student”的属性,因此会导致错误

<>你应该考虑一下重构你的代码。如果希望
拼贴
处理
学生
实体列表,请将
列表学生
更改为
列表学生
。现在,您可以映射这些类,以便告诉Hibernate这两个实体之间的关系:

@Entity
class Collage {
    int id;
    String collageName;
    List<Student> lstStudent;
}

@Entity
class Student{
    String studentName;
    Collage collage;
    int id;
}
,而在
Student
课程中,你将有:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "collage")
public List<Student> getStudents() {
    return this.lstStudents;
}
@ManyToOne(fetch = FetchType.LAZY)
public Collage getCollage(){
    return this.collage;
}
这基本上允许您在
拼贴
类上创建标准,并使用别名直接访问
学生列表

cr.createAlias("lstStudent", "studentsAlias");     

只是想一想,因为您的字段是包私有的,所以其他代码可能无法访问它们(如果它不在同一个包中)。尝试将它们公开,或者为它们添加getter和setter。
cr.createAlias("lstStudent", "studentsAlias");