休眠条件与2个表连接



我有两个表,一个是Student,另一个是Event。我正试着加入两张桌子这是学生桌

@Table(name="student")
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name="sid")
private int sid;
@Column(name="sname")
private String sname;
@Column(name="contactno")
private int contactno;

这是事件表

@Entity
@Table(name="event")
public class Event implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="email")
private String email;
@Column(name="fee")
private int fee;
@Column(name="sid")
private int sid;
@ManyToOne(fetch=FetchType.LAZY,cascade = CascadeType.ALL )
@JoinColumn(name = "sid", referencedColumnName = "sid", insertable = false, updatable = false)


@GeneratedValue(strategy = GenerationType.AUTO)
private  Student stud

我正在写连接道中两个表的代码

public List display() {
Session session = getSessionFactory().openSession();
Criteria cr= session.createCriteria(Student.class,"student");   
cr.createAlias("student.Event", "event");
cr.setProjection ( Projections.distinct(Projections.projectionList()
.add(Projections.property( "event.id"), "id")
.add( Projections.property( " event.name"), "name")
.add(Projections.property( "event.email"), "email")
.add( Projections.property( "event.fee"), "fee")
.add(Projections.property( "student.sname"), "sname")
.add( Projections.property( "student.contactno"), "contactno")));
cr.setResultTransformer((ResultTransformer) Transformers.ALIAS_TO_ENTITY_MAP);
return cr.list();
}

控制器内

@RequestMapping(value="fetch.htm", method = RequestMethod.GET)
public @ResponseBody String display() 
{
System.out.print("fetch the data from student controller n");
List<Event> listdetails = (List<Event>) stDao.display();
System.out.print("fetch the data from student contoller listdetails n"+listdetails);
return new Gson().toJson(listdetails);

}

运行代码时出错HTTP状态500-请求处理失败;嵌套异常为org.hubinate.QueryException:无法解析的属性:的事件:sample.entity.Student

因为学生和事件之间没有直接关系。相反,Event和Student之间存在ManyToOne关系。因此,您必须更改查询才能从事件->学生

public List display() {
Session session = getSessionFactory().openSession();
Criteria cr = session.createCriteria(Event.class, "event");
cr.createAlias("event.student", "student"); // student is property name in Event class
cr.setProjection(Projections.distinct(Projections.projectionList().add(Projections.property("event.id"), "id")
.add(Projections.property("event.name"), "name").add(Projections.property("event.email"), "email")
.add(Projections.property("event.fee"), "fee").add(Projections.property("student.sname"), "sname")
.add(Projections.property("student.contactno"), "contactno")));
cr.setResultTransformer((ResultTransformer) Transformers.ALIAS_TO_ENTITY_MAP);
return cr.list();
}

最新更新