我想实现这个Sql查询,使用hibernate criteria api从两个表中获取所有数据。请帮我编写Dao中的代码,只使用hibernate criteria api从两个表中获取所有数据。
SELECT o.outletId,o.outletName,m.menuId ,m.menuItem,m.menuType
FROM outlet AS o
INNER JOIN outlet_menu_mapping AS om ON o.outletId = om.menuId
INNER JOIN menu AS m ON om.outletId = m.menuId
WHERE m.menuID = 1;
这是我的MENU持久化类,我想使用多对多关系从数据库中获取数据。
@Entity
@Table(name="Menu")
public class Menu {
@Id
@Column(name="menuId")
@GeneratedValue(strategy=GenerationType.AUTO)
private int menuId;
@Column(name="menuItem",nullable=false)
private String menuItem;
@Column(name="menuType",nullable=false)
private String menuType;
@ManyToMany(mappedBy="menu")
private Set<Outlet> outlet = new HashSet<Outlet>();
public int getMenuId() {
return menuId;
}
public void setMenuId(int menuId) {
this.menuId = menuId;
}
public String getMenuItem() {
return menuItem;
}
public void setMenuItem(String menuItem) {
this.menuItem = menuItem;
}
public String getMenuType() {
return menuType;
}
public void setMenuType(String menuType) {
this.menuType = menuType;
}
}
这是我的Outlet持久化类,我想使用多对多关系从数据库中获取数据。
@Entity
@Table(name="Outlet")
public class Outlet implements Serializable {
//private static final long serialVersionUID = -723583058586873479L;
@Id
@Column(name="outletId")
@GeneratedValue(strategy=GenerationType.AUTO)
private int outletId;
@Column(name="outletName",nullable=false)
private String Name;
private Menu menu;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="outlet_menu_mapping",
joinColumns={@JoinColumn(name="outletId")},
inverseJoinColumns={@JoinColumn(name="menuId")})
private Set<Menu> menus = new HashSet<Menu>();
public int getOutletId() {
return outletId;
}
public void setOutletId(int outletId) {
this.outletId = outletId;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
/*
@Override
public String toString() {
return "Student[outletId=" + outletId + ", Name=" + Name
+ "]";
} */
}
这是我尝试实施的标准,但它显示错误
List outlet = session.createCriteria(Outlet.class).createAlias("Menu", "m").add( Restrictions.eq("m.menuId", "1") ).list();