- - PR -
Struts+Hibernate+Spring2.0について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-12-04 12:04
こんにちは。Spring2.0の初心者です。
現在Struts+Hibernate+Spring2.0でWebアプリを作っています。 StrutsからHibernateの検索、更新、検索をするSQL文が Junitでテストする時とWebアプリで動かした時が違います。 使用したDBはDB2です。 呼び出したTBLはEmployeeとSkillです。 EmployeeとSkillが関連付けされています。 Employeeの中にSet型のSkillsのインスタンスがあります。 EmployeeのSkillsをorder-by="SKILL_ID"に設定しています。 Skillsの順番はSkill_Id順で並びます。 Skillの中にSet型employeesのインスタンスがあります。 二つのテーブルはSkill_Mapで関連付けされています。 (employeeService、検索するDAO、トランザクションがすべてDIで管理されている。DBアクセス、検索、更新はHibernateTemplateで行う) @Webアプリのコードは↓Struts:UpdateSkillAction.java //employeeID:2のemployeeを取得する Employee employee = employeeService.getEmployee(new Integer(2)); //employeeから該当のSkillsを取り出す Set Skills = employee.getSkills(); ....いろいろ中略....Skillsに新しいSkillを追加する。 ↓ Skills.add(skill); //employeeに追加したSkillsにセットし直す employee.setSkills(Skills); //employeeを更新する employeeService.updateEmployee(employee); System.out.println("update.skill:"+employeeService.getEmployee(new Integer(2)).getSkills()); AJunitでのコード EmployeeService employeeService = (EmployeeService) factory.getBean("employeeService"); Employee employee = employeeService.getEmployee(new Integer(2)); Set Skills=(Set) employee.getSkills(); ....いろいろ中略...Skillsに新しいSkillを追加する。 ↓ Skills.add(skill); employee.setSkills(empSkills); employeeService.updateEmployee(employee); System.out.println("update.skill:"+employeeService.getEmployee(new Integer(2)).getSkills()); System.out.println("update.skill:"+employeeService.getEmployee(new Integer(2)).getSkills()); ↑Junitで実行するときに、コンソールで見たログは update文の後もう一度EmployeeとSkill二つのTBLを検索し直している。 でも、Webアプリで実行する時 update文の後のselect文はSkillテーブルのみ、Selectするだけです。 そのため、取ってきたSkillsの順番が異なる。 Junitで取ってきたSkillsは内容がSkill_Id順ですが、Webアプリで取ってきたSkillsは追加するSkill順になっています。 EX:employeeId:2のemployeeのスキルは「スキルA」「スキルE]です。 新たに、「スキルB]を追加する。 @Webアプリで実行した時のコンソール old.empskill:[[id:1 name:スキルA description:スキル備考A versionstamp:0], [id:5 name:スキルE description:スキル備考E versionstamp:0]] Hibernate: update EMPLOYEE set VERSION_STAMP=?, EMPLOYEE_NAME=?, SEX=?, JOB=?, TEL=?, MAIL=?, DESCRIPTION=?, DEPARTMENT_ID=? where EMPLOYEE_ID=? and VERSION_STAMP=? Hibernate: insert into SKILL_MAP (EMPLOYEE_ID, SKILL_ID) values (?, ?) Hibernate: select employee0_.EMPLOYEE_ID as EMPLOYEE1_1_, employee0_.VERSION_STAMP as VERSION2_1_, employee0_.EMPLOYEE_NAME as EMPLOYEE3_1_, employee0_.SEX as SEX1_, employee0_.JOB as JOB1_, employee0_.TEL as TEL1_, employee0_.MAIL as MAIL1_, employee0_.DESCRIPTION as DESCRIPT8_1_, employee0_.DEPARTMENT_ID as DEPARTMENT9_1_ from EMPLOYEE employee0_ where employee0_.EMPLOYEE_ID=? update.skills:[[id:1 name:スキルA description:スキル備考A versionstamp:0], [id:5 name:スキルE description:スキル備考E versionstamp:0], [id:2 name:スキルB description:スキル備考B versionstamp:0]] Hibernate: select employee0_.EMPLOYEE_ID as EMPLOYEE1_1_, employee0_.VERSION_STAMP as VERSION2_1_, employee0_.EMPLOYEE_NAME as EMPLOYEE3_1_, employee0_.SEX as SEX1_, employee0_.JOB as JOB1_, employee0_.TEL as TEL1_, employee0_.MAIL as MAIL1_, employee0_.DESCRIPTION as DESCRIPT8_1_, employee0_.DEPARTMENT_ID as DEPARTMENT9_1_ from EMPLOYEE employee0_ where employee0_.EMPLOYEE_ID=? update.skill:[[id:1 name:スキルA description:スキル備考A versionstamp:0], [id:5 name:スキルE description:スキル備考E versionstamp:0], [id:2 name:スキルB description:スキル備考B versionstamp:0]] AJunitで実行した時のコンソール old.empskill:[[id:1 name:スキルA description:スキル備考A versionstamp:0], [id:5 name:スキルE description:スキル備考E versionstamp:0]] Hibernate: update EMPLOYEE set VERSION_STAMP=?, EMPLOYEE_NAME=?, SEX=?, JOB=?, TEL=?, MAIL=?, DESCRIPTION=?, DEPARTMENT_ID=? where EMPLOYEE_ID=? and VERSION_STAMP=? Hibernate: insert into SKILL_MAP (EMPLOYEE_ID, SKILL_ID) values (?, ?) Hibernate: select employee0_.EMPLOYEE_ID as EMPLOYEE1_1_, employee0_.VERSION_STAMP as VERSION2_1_, employee0_.EMPLOYEE_NAME as EMPLOYEE3_1_, employee0_.SEX as SEX1_, employee0_.JOB as JOB1_, employee0_.TEL as TEL1_, employee0_.MAIL as MAIL1_, employee0_.DESCRIPTION as DESCRIPT8_1_, employee0_.DEPARTMENT_ID as DEPARTMENT9_1_ from EMPLOYEE employee0_ where employee0_.EMPLOYEE_ID=? Hibernate: select department0_.DEPARTMENT_ID as DEPARTMENT1_0_0_, department0_.VERSION_STAMP as VERSION2_0_0_, department0_.DEPARTMENT_NAME as DEPARTMENT3_0_0_, department0_.DESCRIPTION as DESCRIPT4_0_0_ from DEPARTMENT department0_ where department0_.DEPARTMENT_ID=? Hibernate: select employees0_.DEPARTMENT_ID as DEPARTMENT9_1_, employees0_.EMPLOYEE_ID as EMPLOYEE1_1_, : :中略 : update.skill:[[id:1 name:スキルA description:スキル備考A versionstamp:0], [id:2 name:スキルB description:スキル備考B versionstamp:0], [id:5 name:スキルE description:スキル備考E versionstamp:0]] 同じの構文でSQL文が異なる原因が分からないです。とても困ります。 ご存知な方、是非教えていただきたいのです。 ありがとうございます。 |
1