Hibernate - 複数テーブルのマッピング(多対1)Advertisementmeny-to-one
多対1のマッピングを行うときは、多の永続化クラスに1の永続化クラスを保持させる。
サンプルテーブル以下の2つのテーブルを利用する。SKILL表(1)
MEMBER表(多)
DTO(永続化クラス)SkillDto.java
package dto;
public class SkillDto {
private Integer id;
private String text;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
MemberDto.java
package dto;
public class MemberDto{
private Integer id;
private String name;
private Integer skillId;
private SkillDto skillDto;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSkillId() {
return skillId;
}
public void setSkillId(Integer skillId) {
this.skillId = skillId;
}
public SkillDto getSkillDto() {
return skillDto;
}
public void setSkillDto(SkillDto skillDto) {
this.skillDto = skillDto;
}
}
マッピング情報skill.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="dto.SkillDto" table="skill">
<id name="id" column="id">
<generator class="assigned" />
</id>
<property name="text" type="java.lang.String" column="text"/>
</class>
</hibernate-mapping>
member.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="dto.MemberDto" table="MEMBER">
<id name="id" column="id" type="java.lang.Integer" >
<generator class="assigned" />
</id>
<property name="name" type="string" column="NAME" />
<property name="skillId" type="java.lang.Integer" column="skillid" />
<many-to-one name ="skillDto" column="skillID"
class="dto.SkillDto" cascade="all" outer-join="auto"
update="false" insert="false" />
</class>
</hibernate-mapping>
クライアントMenyToOne.java
package client;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import dto.MemberDto;
import dto.SkillDto;
public class MenyToOne{
public static void main(String args[]) throws Exception{
Configuration config = new Configuration().configure();
SessionFactory sessionfactory = config.buildSessionFactory();
Session session = sessionfactory.openSession();
List list = session.createCriteria(MemberDto.class).list();
for(int i = 0; i < list.size(); i++){
MemberDto member = (MemberDto)list.get(i);
System.out.print(member.getName());
SkillDto skillDto = member.getSkillDto();
System.out.println("\t" + skillDto.getName());
}
}
}
はじめにMemberDtoをHibernate経由で取得する。そのMemberオブジェクトは対応するSkillを保持している。実行結果 鬼太郎 Java 親父 Java ねずみ男 .NET Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |