Java 当实体处于映射中时,如何获取非主键值?
AssignCoScholastic.javaJava 当实体处于映射中时,如何获取非主键值?,java,hibernate,spring-mvc,exception,Java,Hibernate,Spring Mvc,Exception,AssignCoScholastic.java @Entity @Table(name="assignCoScholastic") public class AssignCoScholastic { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int assginCoScholasticId; @ManyToOne @J
@Entity
@Table(name="assignCoScholastic")
public class AssignCoScholastic
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int assginCoScholasticId;
@ManyToOne
@JoinColumn(name="assignClassId")
private AssignClass assignClass;
@ManyToOne
@JoinColumn(name="coscholasticId")
private CoScholastic coscholastic;
@ManyToOne
@JoinColumn(name="subCoScholasticId")
private SubCoScholasticActivity subCoScholasticActivity;
private String year;
@ManyToOne
@JoinColumn(name="school_id")
private SchoolModel schoolModel;
CoScholastic.java
@Entity
@Table(name="coscholastic")
public class CoScholastic {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int coScholasticId;
@Column(name="Coscholastic_Name")
private String coscholasticName;
// Getters and Setters
实施:
@Override
public List<Object[]> listOfAssignCoScholastics(int assiginedClass, int schoolId, String year) {
Session session=sessionFactory.openSession();
session.beginTransaction();
List<Object[]> listOfAssignCoScholastics=new ArrayList<Object[]>();
try
{
Criteria criteria=session.createCriteria(AssignCoScholastic.class);
criteria.setProjection(Projections.property("coscholastic.coScholasticId"));
criteria.setProjection(Projections.property("coscholastic.coscholasticName"));
criteria.add(Restrictions.eq("assignClass.assignID", assiginedClass));
criteria.add(Restrictions.eq("schoolModel.school_id", schoolId));
criteria.add(Restrictions.like("year", year));
listOfAssignCoScholastics=criteria.list();
session.getTransaction().commit();
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();
sessionFactory.close();
}
return listOfAssignCoScholastics;
}
org.hibernate.QueryException: could not resolve property: coscholastic.coscholasticName of: com.slv.model.AssignCoScholastic
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1465)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getType(CriteriaQueryTranslator.java:547)
at org.hibernate.criterion.PropertyProjection.getTypes(PropertyProjection.java:60)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getProjectedTypes(CriteriaQueryTranslator.java:362)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:100)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:92)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1697)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at com.slv.daoimpl.RegistrationDaoImpl.listOfAssignCoScholastics(RegistrationDaoImpl.java:1907)
at com.slv.controller.SchoolController.loadAssignCoscholastic(SchoolController.java:920)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
您需要告诉hibernate您需要哪个类属性。这就像是在sql需求中编写的连接 这样试试看
Criteria criteria=session.createCriteria(AssignCoScholastic.class,"assignCoScholastic");
criteria.createAlias("assignCoScholastic.coscholastic", "coscholastic");
criteria.createAlias("assignCoScholastic.assignClass", "assignClass");
criteria.createAlias("assignCoScholastic.schoolModel", "schoolModel");
criteria.setProjection(Projections.property("coscholastic.coScholasticId"));
criteria.setProjection(Projections.property("coscholastic.coscholasticName"));
criteria.add(Restrictions.eq("assignClass.assignID", assiginedClass));
criteria.add(Restrictions.eq("schoolModel.school_id", schoolId));//school_id is the property in class schoolModel
criteria.add(Restrictions.like("assignCoScholastic.year", year));
HearclassAliasHavingYear
是为具有year属性的类创建的别名
您的其余代码…我使用了上面的代码,但我只得到了名称,而没有id,它返回的名称列onlyear属性来自哪个类..?year属性来自AssignCoScholastic.java
Criteria criteria=session.createCriteria(AssignCoScholastic.class,"assignCoScholastic");
criteria.createAlias("assignCoScholastic.coscholastic", "coscholasticss")
.setProjection(Projections.distinct(Projections.projectionList()
.add(Projections.property("coscholasticss.coScholasticId"))
.add(Projections.property("coscholasticss.coscholasticName"))));
criteria.add(Restrictions.eq("assignClass.assignID", assiginedClass));
criteria.add(Restrictions.eq("schoolModel.school_id", schoolId));
criteria.add(Restrictions.like("year", year));