Hibernate从SQL

时间:2016-04-28 10:09:38

标签: hibernate many-to-many criteria

我想实现这个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();

0 个答案:

没有答案