首页 > hibernate view 联合主键问题

hibernate view 联合主键问题

如题,在学习View的使用,在Navicat中创建了一个view,表之间关系如下图:

sql语句如下:

select `employee`.`id` AS `id`,`team_employee`.`emp_id` AS `emp_id`,`employee`.`user_id` AS `user_id`,`employee`.`name` AS `emp_name`,`employee`.`password` AS `emp_pwd`,`employee`.`img_url` AS `emp_img`,`employee`.`sso_token` AS `emp_sso_token`,`employee`.`salt` AS `emp_salt`,`team_tag`.`logo_url` AS `te_img`,`team_employee`.`team_id` AS `te_id`,`team_tag`.`shortname` AS `te_short_name`,`team_tag`.`name` AS `te_name`,`team_employee_role`.`role_id` AS `rol_id`,`role`.`description` AS `rol_des` from ((((`team_employee` join `employee` on((`team_employee`.`emp_id` = `employee`.`id`))) join `team_tag` on((`team_employee`.`team_id` = `team_tag`.`id`))) join `team_employee_role` on(((`employee`.`id` = `team_employee_role`.`employee_id`) and (`team_tag`.`id` = `team_employee_role`.`team_id`)))) left join `role` on((`team_employee_role`.`role_id` = `role`.`id`))) order by `employee`.`id`

说下我的问题:
通过Mysql的命令行执行:

select te_id, rol_id from view where emp_id = '916';

得到结果

但在我的SpringMVC+hibernate工程中执行

String hql = "from Employeeteamandrole as etr where teId=? and empId=?";
query.setInteger(0, teId);
query.setInteger(1, empId);
List<Employeeteamandrole> list = query.list();
System.out.println("size: " + list.size());
for(Employee emp: list){
   System.out.println("rol_id is: " + emp.getEmpRolId());
}

的时候,输出结果为:

size: 2
rol_id is: 0
rol_id is: 0

查询结果数目对,但数据准确,查了下hibernate用view,要用联合主键的方法,那么就要把emp_id,te_id,rol_id设置为联合主键,放在key里边,但是问题在于我搜索到的结果都要初始化Key再根据他创建我的实体对象,但是我要根据emp_id,te_id去寻找rol_id,这样就不能先初始化Key,对数据库懂的不多,是我的view创建的有问题吗?还是可以用其他方法?

求教。


问题解决了,我用的hibernate3,注解方式,在inverse view时会生成两个类,一个Entity.java一个EntityId.java,将联合主键内容放到EntityId.java中去,其他内容在Entity.java中就好了,配置只需要配置Entity即可。按照数据表的方式进行操作即可。

【热门文章】
【热门文章】