2010年1月24日 星期日

Hibernate Annotation 對映

One2OneUnidirectAssociationPk
One2OneUnidirectAssociationJoin
One2OneUnidirectAssociationFk

One2OneBidirectAssociationJoin

One2ManyUnidirectAssociationJoinMember
One2ManyUnidirectAssociationFk

One2ManyAndMany2OneBidirectAssociation
One2ManyAndMany2OneBidirectAssociationJoin

Many2OneUnidirectAssociationJoin
Many2OneUnidirectAssociationFk

Many2ManyUnidirectAssociationJoin
Many2ManyBidirectAssociationJoin



package com.todd;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateAnnotationHelper {
    private static SessionFactory sessionFactory;
    static {
        try {
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void close() {
        getSessionFactory().close();
    }
} 

Hibernate Annotation One2OneUnidirectAssociationPk

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;


@Entity
@Table(name = "one2one_unidirect_association_pk_member")
public class One2OneUnidirectAssociationPkMember implements Serializable{

    private String user_id;
    private String user_name;
    private String member_desc;
   
    private One2OneUnidirectAssociationPkSkill skill;
   
    @Id
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    @Column(name = "user_name")
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    @Column(name = "member_desc")
    public String getMember_desc() {
        return member_desc;
    }
    public void setMember_desc(String member_desc) {
        this.member_desc = member_desc;
    }
   
    @OneToOne
    @PrimaryKeyJoinColumn
    public One2OneUnidirectAssociationPkSkill getSkill() {
        return skill;
    }
    public void setSkill(One2OneUnidirectAssociationPkSkill skill) {
        this.skill = skill;
    }


}

Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2one_unidirect_association_pk_skill")
public class One2OneUnidirectAssociationPkSkill implements Serializable{

    private String user_id;
    private String skill;
   
    @Id
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
   

   
}

Test


package com.todd.bean;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.讓主鍵對映就行
 * @author Todd
 */
public class One2OneUnidirectAssociationPkMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2OneUnidirectAssociationPkMember member = new One2OneUnidirectAssociationPkMember();
        member.setUser_id("ots520");
        member.setUser_name("ots520");
        member.setMember_desc("ots520 desc");
       
        One2OneUnidirectAssociationPkSkill skill = new One2OneUnidirectAssociationPkSkill();
        skill.setUser_id("ots520");
        skill.setSkill("ass");
        member.setSkill(skill);
       
        session.save(member);
        session.save(skill);
       
        One2OneUnidirectAssociationPkMember pkMember = (One2OneUnidirectAssociationPkMember) session.get(One2OneUnidirectAssociationPkMember.class, "ots520");
        System.out.println("member desc =" + pkMember.getMember_desc());
       
       
        tx.commit();
        session.close();       
       
    }
   


}

Hibernate Annotation One2OneUnidirectAssociationJoin

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;


@Entity
@Table(name = "one2one_unidirect_association_join_member")
public class One2OneUnidirectAssociationJoinMember implements Serializable{

    private int member_id;
    private String user_id;
    private String user_name;
    private String member_desc;
   
    private One2OneUnidirectAssociationJoinSkill skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMember_id() {
        return member_id;
    }
    public void setMember_id(int member_id) {
        this.member_id = member_id;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    @Column(name = "user_name")
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

   
    @Column(name = "member_desc")
    public String getMember_desc() {
        return member_desc;
    }
    public void setMember_desc(String member_desc) {
        this.member_desc = member_desc;
    }

   
    @OneToOne(optional = true)
    @JoinTable(name = "one2one_unidirect_association_join_member_skill",
            joinColumns = {
                @JoinColumn(name = "fk_member_id", unique = true)
            },
            inverseJoinColumns = {
                @JoinColumn(name = "fk_skill_id")
            }
        )
    public One2OneUnidirectAssociationJoinSkill getSkill() {
        return skill;
    }
    public void setSkill(One2OneUnidirectAssociationJoinSkill skill) {
        this.skill = skill;
    }

}

Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2one_unidirect_association_join_skill")
public class One2OneUnidirectAssociationJoinSkill implements Serializable{

    private int skill_id;
    private String user_id;
    private String skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkill_id() {
        return skill_id;
    }
    public void setSkill_id(int skill_id) {
        this.skill_id = skill_id;
    }

   
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }


   
}

Test

package com.todd.bean;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.join 的仲介table, 不需有實體bean, 會自己產生
 * 2.
 * @author Todd
 */
public class One2OneUnidirectAssociationJoinMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2OneUnidirectAssociationJoinMember member = new One2OneUnidirectAssociationJoinMember();
        member.setUser_id("ots520");
        member.setUser_name("ots520");
        member.setMember_desc("ots520 desc");
       
        One2OneUnidirectAssociationJoinSkill skill = new One2OneUnidirectAssociationJoinSkill();
        skill.setUser_id("ots520");
        skill.setSkill("ass");
        member.setSkill(skill);

        session.save(member);
        session.save(skill);
       
        One2OneUnidirectAssociationJoinMember JoinMember = (One2OneUnidirectAssociationJoinMember) session.get(One2OneUnidirectAssociationJoinMember.class, 1);
        System.out.println("member desc =" + JoinMember.getMember_desc());
       
       
        tx.commit();
        session.close();       
       
    }
   


}

Hibernate Annotation One2OneUnidirectAssociationFk

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

@Entity
@Table(name = "one2one_unidirect_association_fk_member")
public class One2OneUnidirectAssociationFkMember implements Serializable{

    private int oid;
    private String user_id;
    private String user_name;
    private String member_desc;
   
    private One2OneUnidirectAssociationFkSkill skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "oid")
    public int getOid() {
        return oid;
    }
    public void setOid(int oid) {
        this.oid = oid;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    @Column(name = "user_name")
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    @Column(name = "member_desc")
    public String getMember_desc() {
        return member_desc;
    }
    public void setMember_desc(String member_desc) {
        this.member_desc = member_desc;
    }
   
    @OneToOne
    @JoinColumn(name = "skill_id")
    public One2OneUnidirectAssociationFkSkill getSkill() {
        return skill;
    }
    public void setSkill(One2OneUnidirectAssociationFkSkill skill) {
        this.skill = skill;
    }


}

Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2one_unidirect_association_fk_skill")
public class One2OneUnidirectAssociationFkSkill implements Serializable{

    private int skill_id;
    private String user_id;
    private String skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkill_id() {
        return skill_id;
    }
    public void setSkill_id(int skill_id) {
        this.skill_id = skill_id;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }

}

Test


package com.todd.bean;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;


public class One2OneUnidirectAssociationFkMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2OneUnidirectAssociationFkMember member = new One2OneUnidirectAssociationFkMember();
        member.setUser_id("ots520");
        member.setUser_name("ots520");
        member.setMember_desc("ots520 desc");
       
        One2OneUnidirectAssociationFkSkill skill = new One2OneUnidirectAssociationFkSkill();
        skill.setUser_id("ots520");
        skill.setSkill("ots520 fk skill");
        member.setSkill(skill);

        session.save(skill);
        session.save(member);

       
        One2OneUnidirectAssociationFkMember TestMember = (One2OneUnidirectAssociationFkMember) session.get(One2OneUnidirectAssociationFkMember.class, 2);
        One2OneUnidirectAssociationFkSkill unidirectAssociationFkSkill = TestMember.getSkill();
        System.out.println("unidirectAssociationFkSkill=" + unidirectAssociationFkSkill.getSkill());
       
        tx.commit();
        session.close();       
       
    }
   


}

Hibernate Annotation One2OneBidirectAssociationJoin

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;



@Entity
@Table(name = "one2one_bidirect_association_join_member")
public class One2OneBidirectAssociationJoinMember implements Serializable{

    private int member_id;
    private String user_id;
    private String user_name;
    private String member_desc;
   
    private One2OneBidirectAssociationJoinSkill skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMember_id() {
        return member_id;
    }
    public void setMember_id(int member_id) {
        this.member_id = member_id;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    @Column(name = "user_name")
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

   
    @Column(name = "member_desc")
    public String getMember_desc() {
        return member_desc;
    }
    public void setMember_desc(String member_desc) {
        this.member_desc = member_desc;
    }

   
    @OneToOne(optional = true)
    @JoinTable(name = "one2one_bidirect_association_join_member_skill",
            joinColumns = {
                @JoinColumn(name = "fk_member_id", unique = true)
            },
            inverseJoinColumns = {
                @JoinColumn(name = "fk_skill_id")
            }
        )
    public One2OneBidirectAssociationJoinSkill getSkill() {
        return skill;
    }
    public void setSkill(One2OneBidirectAssociationJoinSkill skill) {
        this.skill = skill;
    }

}

Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;



@Entity
@Table(name = "one2one_bidirect_association_join_skill")
public class One2OneBidirectAssociationJoinSkill implements Serializable{

    private int skill_id;
    private String user_id;
    private String skill;
   
    private One2OneBidirectAssociationJoinMember member;  
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkill_id() {
        return skill_id;
    }
    public void setSkill_id(int skill_id) {
        this.skill_id = skill_id;
    }

   
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
   
    @OneToOne(optional=true, mappedBy="skill") // pointing to Member's skill field
    public One2OneBidirectAssociationJoinMember getMember() {
        return member;
    }
    public void setMember(One2OneBidirectAssociationJoinMember member) {
        this.member = member;
    }

}

Test


package com.todd.bean;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.join 的仲介table, 不需有實體bean, 會自己產生
 * 2.
 * @author Todd
 */
public class One2OneBidirectAssociationJoinMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2OneBidirectAssociationJoinMember member = new One2OneBidirectAssociationJoinMember();
        member.setUser_id("ots520");
        member.setUser_name("ots520");
        member.setMember_desc("ots520 member desc");
       
        One2OneBidirectAssociationJoinSkill skill = new One2OneBidirectAssociationJoinSkill();
        skill.setUser_id("ots520");
        skill.setSkill("ass");
        member.setSkill(skill);
        skill.setMember(member);
       
        session.save(member);
        session.save(skill);
       
        One2OneBidirectAssociationJoinMember JoinMember = (One2OneBidirectAssociationJoinMember) session.get(One2OneBidirectAssociationJoinMember.class, 1);
        System.out.println("member desc =" + JoinMember.getSkill().getSkill_id());
       
       
        One2OneBidirectAssociationJoinSkill JoinSkill = (One2OneBidirectAssociationJoinSkill) session.get(One2OneBidirectAssociationJoinSkill.class, 1);
        System.out.println("member desc =" + JoinSkill.getMember().getMember_desc());
       
        tx.commit();
        session.close();       
       
    }
   
}

Hibernate Annotation One2ManyUnidirectAssociationJoin

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_unidirect_association_join_member")
public class One2ManyUnidirectAssociationJoinMember implements Serializable{

    private int member_id;
    private String user_id;
    private String user_name;
    private String member_desc;

    private List skillList;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMember_id() {
        return member_id;
    }
    public void setMember_id(int member_id) {
        this.member_id = member_id;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    @Column(name = "user_name")
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

   
    @Column(name = "member_desc")
    public String getMember_desc() {
        return member_desc;
    }
    public void setMember_desc(String member_desc) {
        this.member_desc = member_desc;
    }

   
    @OneToMany
    @JoinTable(name = "one2many_unidirect_association_join_member_skill",
        joinColumns = {
            //@JoinColumn(name="fk_member_id", unique = true) //錯的          
            @JoinColumn(name="fk_member_id")
        },
        inverseJoinColumns = {
            @JoinColumn(name="fk_skill_id")
        }
    )
    public List getSkillList() {
        return skillList;
    }
    public void setSkillList(List skillList) {
        this.skillList = skillList;
    }

}


Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_unidirect_association_join_skill")
public class One2ManyUnidirectAssociationJoinSkill implements Serializable{

    private int skill_id;
    private String user_id;
    private String skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkill_id() {
        return skill_id;
    }
    public void setSkill_id(int skill_id) {
        this.skill_id = skill_id;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }


   
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.
 * 2.
 * @author Todd
 */
public class One2ManyUnidirectAssociationJoinMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2ManyUnidirectAssociationJoinMember member = new One2ManyUnidirectAssociationJoinMember();
        member.setUser_id("ots520");
        member.setUser_name("ots520");
        member.setMember_desc("ots520 desc");
       
        List skillList = new ArrayList();
        One2ManyUnidirectAssociationJoinSkill skill1 = new One2ManyUnidirectAssociationJoinSkill();
        skill1.setUser_id("ots520");
        skill1.setSkill("ass1");
        session.save(skill1);
        skillList.add(skill1);
       
        One2ManyUnidirectAssociationJoinSkill skill2 = new One2ManyUnidirectAssociationJoinSkill();
        skill2.setUser_id("ots5202");
        skill2.setSkill("ass2");
        session.save(skill2);
        skillList.add(skill2);
       
        member.setSkillList(skillList);
        session.save(member);

       
       
       
        One2ManyUnidirectAssociationJoinMember JoinMember = (One2ManyUnidirectAssociationJoinMember) session.get(One2ManyUnidirectAssociationJoinMember.class, 3);
        if(!(JoinMember == null)){
            List list = JoinMember.getSkillList();
            for (One2ManyUnidirectAssociationJoinSkill one2ManyUnidirectAssociationJoinSkill : list) {
                System.out.println("one2ManyUnidirectAssociationJoinSkill=" + one2ManyUnidirectAssociationJoinSkill.getSkill_id());
            }
        }
       
       
       
        tx.commit();
        session.close();       
       
    }
   


}

Hibernate Annotation One2ManyUnidirectAssociationFk

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_unidirect_association_fk_member")
public class One2ManyUnidirectAssociationFkMember implements Serializable{

    private int memberId;
    private String userId;
    private String userName;
    private String memberDesc;

    private List skillList;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMemberId() {
        return memberId;
    }
    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "user_name")
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
   
    @Column(name = "member_desc")
    public String getMemberDesc() {
        return memberDesc;
    }
    public void setMemberDesc(String memberDesc) {
        this.memberDesc = memberDesc;
    }
   
    @OneToMany
    @JoinColumn(name = "member_id") // watch out!
    public List getSkillList() {
        return skillList;
    }
    public void setSkillList(List skillList) {
        this.skillList = skillList;
    }
   

}


Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_unidirect_association_fk_skill")
public class One2ManyUnidirectAssociationFkSkill implements Serializable{

    private int skillId;
    private String userId;
    private String skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkillId() {
        return skillId;
    }
    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
   
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.
 * 2.
 * @author Todd
 */
public class One2ManyUnidirectAssociationFkMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2ManyUnidirectAssociationFkMember member = new One2ManyUnidirectAssociationFkMember();
        member.setUserId("ots520");
        member.setUserName("ots520");
        member.setMemberDesc("ots520 desc");
       
        List skillList = new ArrayList();
        One2ManyUnidirectAssociationFkSkill skill1 = new One2ManyUnidirectAssociationFkSkill();
        skill1.setUserId("ots520");
        skill1.setSkill("skill1");
        session.save(skill1);
        skillList.add(skill1);
       
        One2ManyUnidirectAssociationFkSkill skill2 = new One2ManyUnidirectAssociationFkSkill();
        skill2.setUserId("ots520");
        skill2.setSkill("skill2");
        session.save(skill2);
        skillList.add(skill2);

       
        member.setSkillList(skillList);
        session.save(member);

       
       
       
        One2ManyUnidirectAssociationFkMember JoinMember = (One2ManyUnidirectAssociationFkMember) session.get(One2ManyUnidirectAssociationFkMember.class, 1);
        if(!(JoinMember == null)){
            List list = JoinMember.getSkillList();
            for (One2ManyUnidirectAssociationFkSkill one2ManyUnidirectAssociationFkSkill : list) {
                System.out.println("one2ManyUnidirectAssociationFkSkill=" + one2ManyUnidirectAssociationFkSkill.getSkillId());
            }
        }
       
       
       
        tx.commit();
        session.close();       
       
    }
   


}

Hibernate Annotation One2ManyAndMany2OneBidirectAssociation

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_and_many2one_bidirect_association_member")
public class One2ManyAndMany2OneBidirectAssociationMember implements Serializable{

    private int memberId;
    private String userId;
    private String userName;
    private String memberDesc;

    private List skillList;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")       
    public int getMemberId() {
        return memberId;
    }
    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "user_name")
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
   
    @Column(name = "member_desc")
    public String getMemberDesc() {
        return memberDesc;
    }
    public void setMemberDesc(String memberDesc) {
        this.memberDesc = memberDesc;
    }


    @OneToMany(mappedBy="member") // 對應到對方的 field喔 , 不是column name
    @Column(name="skill_id")  // inverse=true
    public List getSkillList() {
        return skillList;
    }
    public void setSkillList(
            List skillList) {
        this.skillList = skillList;
    }


}


Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_and_many2one_bidirect_association_skill")
public class One2ManyAndMany2OneBidirectAssociationSkill implements Serializable{

    private int skillId;
    private String userId;
    private String skill;
   
    private One2ManyAndMany2OneBidirectAssociationMember member;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkillId() {
        return skillId;
    }
    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }

    @ManyToOne 
    @JoinColumn(name="member_id") // inverse = false , 對應到對方的 id column name
    public One2ManyAndMany2OneBidirectAssociationMember getMember() {
        return member;
    }
    public void setMember(One2ManyAndMany2OneBidirectAssociationMember member) {
        this.member = member;
    }



   
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.雙向的話, 只要把One2Many 或 Many2One 對調就行
 * 2.
 * @author Todd
 */
public class One2ManyAndMany2OneBidirectAssociationMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2ManyAndMany2OneBidirectAssociationMember member = new One2ManyAndMany2OneBidirectAssociationMember();
        member.setUserId("ots520");
        member.setUserName("ots520");
        member.setMemberDesc("ots520 desc");
       
        List skillList = new ArrayList();
        One2ManyAndMany2OneBidirectAssociationSkill skill1 = new One2ManyAndMany2OneBidirectAssociationSkill();
        skill1.setUserId("ots520");
        skill1.setSkill("ass1");
        skill1.setMember(member);
        session.save(skill1);
        skillList.add(skill1);
       
        One2ManyAndMany2OneBidirectAssociationSkill skill2 = new One2ManyAndMany2OneBidirectAssociationSkill();
        skill2.setUserId("ots520");
        skill2.setSkill("ass2");
        skill2.setMember(member);
        session.save(skill2);
        skillList.add(skill2);
       
        member.setSkillList(skillList);
        session.save(member);

       
       
       
        One2ManyAndMany2OneBidirectAssociationMember JoinMember = (One2ManyAndMany2OneBidirectAssociationMember) session.get(One2ManyAndMany2OneBidirectAssociationMember.class, 1);
        if(!(JoinMember == null)){
            List list = JoinMember.getSkillList();
            for (One2ManyAndMany2OneBidirectAssociationSkill one2ManyAndMany2OneBidirectAssociationSkill : list) {
                System.out.println("one2ManyAndMany2OneBidirectAssociationSkill=" + one2ManyAndMany2OneBidirectAssociationSkill.getSkillId());
            }
        }
       
        One2ManyAndMany2OneBidirectAssociationSkill JoinSkill = (One2ManyAndMany2OneBidirectAssociationSkill) session.get(One2ManyAndMany2OneBidirectAssociationSkill.class, 4);
        if(!(JoinSkill == null)){
            One2ManyAndMany2OneBidirectAssociationMember JoinSkillMember = JoinSkill.getMember();
            System.out.println("JoinSkillMember=" + JoinSkillMember.getMemberId());
        }
       
        tx.commit();
        session.close();       
       
    }
   


}

Hibernate Annotation One2ManyAndMany2OneBidirectAssociationJoin

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_and_many2one_bidirect_association_join_member")
public class One2ManyAndMany2OneBidirectAssociationJoinMember implements Serializable{

    private int memberId;
    private String userId;
    private String userName;
    private String memberDesc;

    private List skillList;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")       
    public int getMemberId() {
        return memberId;
    }
    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "user_name")
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
   
    @Column(name = "member_desc")
    public String getMemberDesc() {
        return memberDesc;
    }
    public void setMemberDesc(String memberDesc) {
        this.memberDesc = memberDesc;
    }
   
   
   
//    @OneToMany
//    @JoinTable(name = "one2many_and_many2one_bidirect_association_join_member_skill",
//        joinColumns = {
//            //@JoinColumn(name="fk_member_id", unique = true) //若要 1 對 1的話, 加上 unique
//            @JoinColumn(name="fk_member_id")        
//        },
//        inverseJoinColumns = {
//            @JoinColumn(name="fk_skill_id")
//        }
//    )
   
    @OneToMany(mappedBy = "member")
    public List getSkillList() {
        return skillList;
    }
    public void setSkillList(
            List skillList) {
        this.skillList = skillList;
    }

}


Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "one2many_and_many2one_bidirect_association_join_skill")
public class One2ManyAndMany2OneBidirectAssociationJoinSkill implements Serializable{

    private int skillId;
    private String userId;
    private String skill;
   
    private One2ManyAndMany2OneBidirectAssociationJoinMember member;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkillId() {
        return skillId;
    }
    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
   

    @ManyToOne(optional=true)
    @JoinTable(name = "one2many_and_many2one_bidirect_association_join_member_skill",
        joinColumns = {
          @JoinColumn(name="fk_skill_id", unique = true)
        },
        inverseJoinColumns = {
          @JoinColumn(name="fk_member_id")
        }
    )
    public One2ManyAndMany2OneBidirectAssociationJoinMember getMember() {
        return member;
    }
    public void setMember(One2ManyAndMany2OneBidirectAssociationJoinMember member) {
        this.member = member;
    }
   
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.雙向的話, 只要把One2Many 或 Many2One 對調就行
 * 2.
 * @author Todd
 */
public class One2ManyAndMany2OneBidirectAssociationJoinMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        One2ManyAndMany2OneBidirectAssociationJoinMember member = new One2ManyAndMany2OneBidirectAssociationJoinMember();
        member.setUserId("ots520");
        member.setUserName("ots520");
        member.setMemberDesc("ots520 desc");
       
        List skillList = new ArrayList();
       
        One2ManyAndMany2OneBidirectAssociationJoinSkill skill1 = new One2ManyAndMany2OneBidirectAssociationJoinSkill();
        skill1.setUserId("ots520");
        skill1.setSkill("skill1");
        skill1.setMember(member);
        session.save(skill1);
        skillList.add(skill1);
       
        One2ManyAndMany2OneBidirectAssociationJoinSkill skill2 = new One2ManyAndMany2OneBidirectAssociationJoinSkill();
        skill2.setUserId("ots520");
        skill2.setSkill("skill2");
        skill2.setMember(member);
        session.save(skill2);
        skillList.add(skill2);

       
        member.setSkillList(skillList);
        session.save(member);

       
       
       
        One2ManyAndMany2OneBidirectAssociationJoinMember JoinMember = (One2ManyAndMany2OneBidirectAssociationJoinMember) session.get(One2ManyAndMany2OneBidirectAssociationJoinMember.class, 3);
        if(!(JoinMember == null)){
            List list = JoinMember.getSkillList();
            for (One2ManyAndMany2OneBidirectAssociationJoinSkill one2ManyAndMany2OneBidirectAssociationJoinSkill : list) {
                System.out.println("one2ManyAndMany2OneBidirectAssociationJoinSkill=" + one2ManyAndMany2OneBidirectAssociationJoinSkill.getSkillId());
            }
        }
       
        One2ManyAndMany2OneBidirectAssociationJoinSkill JoinSkill = (One2ManyAndMany2OneBidirectAssociationJoinSkill) session.get(One2ManyAndMany2OneBidirectAssociationJoinSkill.class, 4);
        if(!(JoinSkill == null)){
            One2ManyAndMany2OneBidirectAssociationJoinMember JoinSkillMember = JoinSkill.getMember();
            System.out.println("JoinSkillMember=" + JoinSkillMember.getMemberId());
        }
       
        tx.commit();
        session.close();       
       
    }

}

Hibernate Annotation Many2OneUnidirectAssociationJoin

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "many2one_unidirect_association_join_member")
public class Many2OneUnidirectAssociationJoinMember implements Serializable{

    private int member_id;
    private String user_id;
    private String user_name;
    private String member_desc;

    private Many2OneUnidirectAssociationJoinSkill skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMember_id() {
        return member_id;
    }
    public void setMember_id(int member_id) {
        this.member_id = member_id;
    }
   
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    @Column(name = "user_name")
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

   
    @Column(name = "member_desc")
    public String getMember_desc() {
        return member_desc;
    }
    public void setMember_desc(String member_desc) {
        this.member_desc = member_desc;
    }


   
    @ManyToOne(optional=true)
    @JoinTable(name = "many2one_unidirect_association_join_member_skill",
        joinColumns = {
            @JoinColumn(name="fk_member_id", unique = true)           
        },
        inverseJoinColumns = {
            @JoinColumn(name="fk_skill_id")
        }
    )
    public Many2OneUnidirectAssociationJoinSkill getSkill() {
        return skill;
    }
    public void setSkill(Many2OneUnidirectAssociationJoinSkill skill) {
        this.skill = skill;
    }
}

Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "many2one_unidirect_association_join_skill")
public class Many2OneUnidirectAssociationJoinSkill implements Serializable{

    private int skill_id;
    private String user_id;
    private String skill;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")    
    public int getSkill_id() {
        return skill_id;
    }
    public void setSkill_id(int skill_id) {
        this.skill_id = skill_id;
    }
    
    @Column(name = "user_id")
    public String getUser_id() {
        return user_id;
    }
    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }
    
    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.多個member 有共同的 skill時
 * 2.
 * @author Todd
 */
public class Many2OneUnidirectAssociationJoinMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        Many2OneUnidirectAssociationJoinMember member1 = new Many2OneUnidirectAssociationJoinMember();
        member1.setUser_id("ots520");
        member1.setUser_name("ots520");
        member1.setMember_desc("ots520 desc1");

        Many2OneUnidirectAssociationJoinMember member2 = new Many2OneUnidirectAssociationJoinMember();
        member2.setUser_id("todd");
        member2.setUser_name("todd");
        member2.setMember_desc("ots520 desc2");

       
        Many2OneUnidirectAssociationJoinSkill skill = new Many2OneUnidirectAssociationJoinSkill();
        skill.setUser_id("這情況應該不用有 user_id了吧");
        skill.setSkill("ass");
        session.save(skill);
       
        member1.setSkill(skill);
        member2.setSkill(skill);
        session.save(member1);
        session.save(member2);
       
       
       
        Many2OneUnidirectAssociationJoinMember JoinMember = (Many2OneUnidirectAssociationJoinMember) session.get(Many2OneUnidirectAssociationJoinMember.class, 7);
        if(!(JoinMember == null)){
            System.out.println("JoinMember=" + JoinMember.getSkill().getSkill_id());
        }
       
        tx.commit();
        session.close();       
       
    }
}

Hibernate Annotation Many2OneUnidirectAssociationFk

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "many2one_unidirect_association_fk_member")
public class Many2OneUnidirectAssociationFkMember implements Serializable{

    private int memberId;
    private String userId;
    private String userName;
    private String memberDesc;

    private Many2OneUnidirectAssociationFkSkill skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMemberId() {
        return memberId;
    }
    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "user_name")
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
   
    @Column(name = "member_desc")
    public String getMemberDesc() {
        return memberDesc;
    }
    public void setMemberDesc(String memberDesc) {
        this.memberDesc = memberDesc;
    }
   
    @ManyToOne
    @JoinColumn(name = "skill_id") // watch out! 指定 一方 的對應key
    public Many2OneUnidirectAssociationFkSkill getSkill() {
        return skill;
    }
    public void setSkill(Many2OneUnidirectAssociationFkSkill skill) {
        this.skill = skill;
    }
}

Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "many2one_unidirect_association_fk_skill")
public class Many2OneUnidirectAssociationFkSkill implements Serializable{

    private int skillId;
    private String userId;
    private String skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkillId() {
        return skillId;
    }
    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.
 * 2.
 * @author Todd
 */
public class Many2OneUnidirectAssociationFkMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        Many2OneUnidirectAssociationFkSkill skill = new Many2OneUnidirectAssociationFkSkill();
        skill.setUserId("這情況就不須這欄位了吧");
        skill.setSkill("skill");
        session.save(skill);
       
        Many2OneUnidirectAssociationFkMember member1 = new Many2OneUnidirectAssociationFkMember();
        member1.setUserId("ots520");
        member1.setUserName("ots520");
        member1.setMemberDesc("ots520 desc");
        member1.setSkill(skill);
       
        Many2OneUnidirectAssociationFkMember member2 = new Many2OneUnidirectAssociationFkMember();
        member2.setUserId("todd");
        member2.setUserName("todd name");
        member2.setMemberDesc("todd desc");
        member2.setSkill(skill);
       
        session.save(member1);
        session.save(member2);
       
        tx.commit();
        session.close();       
       
    }

}

Hibernate Annotation Many2ManyUnidirectAssociationJoin

Member


package com.todd.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name = "many2many_unidirect_association_join_member")
public class Many2ManyUnidirectAssociationJoinMember implements Serializable{

    private int memberId;
    private String userId;
    private String userName;
    private String memberDesc;

    private List skillList;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")   
    public int getMemberId() {
        return memberId;
    }
    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
   
    @Column(name = "user_name")
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
   
    @Column(name = "member_desc")
    public String getMemberDesc() {
        return memberDesc;
    }
    public void setMemberDesc(String memberDesc) {
        this.memberDesc = memberDesc;
    }

   
    @ManyToMany
    @JoinTable(name = "many2many_unidirect_association_join_member_skill",
        joinColumns = {
            @JoinColumn(name="fk_member_id")          
        },
        inverseJoinColumns = {
            @JoinColumn(name="fk_skill_id")
        }
    )
    public List getSkillList() {
        return skillList;
    }
    public void setSkillList(List skillList) {
        this.skillList = skillList;
    }   
}


Skill


package com.todd.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;


@Entity
@Table(name = "many2many_unidirect_association_join_skill")
public class Many2ManyUnidirectAssociationJoinSkill implements Serializable{

    private int skillId;
    private String userId;
    private String skill;
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "skill_id")   
    public int getSkillId() {
        return skillId;
    }
    public void setSkillId(int skillId) {
        this.skillId = skillId;
    }
   
    @Column(name = "user_id")
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }

    @Column(name = "skill")
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
}

Test


package com.todd.bean;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

import junit.framework.TestCase;

import com.todd.HibernateAnnotationHelper;

/**
 * 1.多對多的意義是?
 * 2.
 * @author Todd
 */
public class Many2ManyUnidirectAssociationJoinMyTestCaseA extends TestCase {


    public void test(){
       
        Session session = HibernateAnnotationHelper.getSessionFactory().openSession();       
        Transaction tx = session.beginTransaction();

        Many2ManyUnidirectAssociationJoinMember member1 = new Many2ManyUnidirectAssociationJoinMember();
        member1.setUserId("ots520");
        member1.setUserName("ots520");
        member1.setMemberDesc("ots520 desc");
       
        Many2ManyUnidirectAssociationJoinMember member2 = new Many2ManyUnidirectAssociationJoinMember();
        member2.setUserId("todd");
        member2.setUserName("todd name");
        member2.setMemberDesc("todd desc");

       
        List skillList = new ArrayList();
       
        Many2ManyUnidirectAssociationJoinSkill skill1 = new Many2ManyUnidirectAssociationJoinSkill();
        skill1.setUserId("none");
        skill1.setSkill("skill1");
        session.save(skill1);
        skillList.add(skill1);
       
        Many2ManyUnidirectAssociationJoinSkill skill2 = new Many2ManyUnidirectAssociationJoinSkill();
        skill2.setUserId("none");
        skill2.setSkill("skill2");
        session.save(skill2);
        skillList.add(skill2);

       
        member1.setSkillList(skillList);
        member2.setSkillList(skillList);
        session.save(member1);
        session.save(member2);
       
        tx.commit();
        session.close();       
       
    }
}