数据库表 food_menu_plan结构图:
+-------------------+----------------+--------+--------+-----------+-----------------------+
| Field | Type | Null | Key | Default | Extra |+-------------------+----------------+--------+--------+-----------+-----------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| type | varchar(45) | YES | | NULL | |
| img | varchar(45) | YES | | NULL | |
| plan_date | varchar(45) | YES | | NULL | |
| created_date | varchar(60) | YES | | NULL | |
+--------------+-------------+------+-----+---------+--------------------------------------+
数据库表 food_menu结构图:
+---------------+----------------+------+---------+------------+---------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+----------------+------+---------+-----------+-----------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(45) | YES | | NULL | |
| code | varchar(45) | YES | | NULL | |
| type | varchar(45) | YES | | NULL | |
| taste | varchar(45) | YES | | NULL | |
| season | varchar(45) | YES | | NULL | |
| rank | int(11) | YES | | NULL | |
| is_active | tinyint(1) | YES | | NULL | |
+-------------+-----------------+--------+--------+-----------+----------------------+
数据库表 food_menu_plan_has_food_menu结构图:
+-----------------------------+----------+-----+---------+-----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------------+---------+------+----------+---------+--------+
| food_menu_plan_id | int(11) | NO | PRI | NULL | |
| food_menu_id | int(11) | NO | PRI | NULL | |
+-----------------------------+---------+------+---------+-----------+--------+
功能要求:
根据food_menu_plan的id值查找对应的food_menu的值。
代码:(出于方便,只写 service里的方法)
service:
public List<FoodMenu> findByType(int id) {
List<FoodMenu> foodMenus = null;
final int foodMenuPlanId = id;
foodMenus = foodMenuDAO.executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
List<Object[]> objects = null;
List<FoodMenu> list = new ArrayList<FoodMenu>();
//注意has表使用,在写HQL语句的时候,对于外健关联的字段,不应再写当前字段,应直接写对应的实体类
Query query = session
.createQuery(
"from FoodMenu fm,FoodMenuPlanHasFoodMenu fhf,FoodMenuPlan fmp where fmp.id = fhf.FoodMenuPlan and fm.id = fhf.FoodMenu and fmp.id = ?")
.setParameter(0, foodMenuPlanId);
//通过上面HQL语句查询出来的集合,是object 类型,我们需要转换为我们需要的实体类型。
objects = query.list();
for (int i = 0; i < objects.size(); i++) {
Object[] obs = objects.get(i);
FoodMenu foodMenu = (FoodMenu) obs[0];
list.add(foodMenu);
}
//解决hibernate中延迟加载的问题
for (FoodMenu foodMenu : list) {
Hibernate.initialize(foodMenu.getFoodMaterials());
Hibernate.initialize(foodMenu.getFoodMenuPlans());
}
return list;
}
});
return foodMenus;
}
个人 写法,有更好的写法的话请告诉本人。