自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2012年1月2日月曜日

Hibernate EntityManager ManyToMany

一対多サンプル(Hibernate)

ポイント:
1、Joinテーブル:JOIN_DELEGATE_EVENT
2、EventとDelegateテーブル

Event.java
package com.test;

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

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Event {
    private int eventId;
    private String eventName;
    private List<Delegate> delegates = new ArrayList<Delegate>();

    @Id
    @GeneratedValue
    public int getEventId() {
        return eventId;
    }

    public void setEventId(int eventId) {
        this.eventId = eventId;
    }

    public String getEventName() {
        return eventName;
    }

    public void setEventName(String eventName) {
        this.eventName = eventName;
    }

    @ManyToMany
    @JoinTable(name = "JOIN_DELEGATE_EVENT", joinColumns = {
        @JoinColumn(name = "eventId")
    }, inverseJoinColumns = {
        @JoinColumn(name = "delegateId")
    })
    public List<Delegate> getDelegates() {
        return delegates;
    }

    public void setDelegates(List<Delegate> delegates) {
        this.delegates = delegates;
    }
}

Delegate.java
package com.test;

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

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Delegate {
    private int delegateId;
    private String delegateName;
    private List<Event> events = new ArrayList<Event>();

    @Id
    @GeneratedValue
    public int getDelegateId() {
        return delegateId;
    }

    public void setDelegateId(int delegateId) {
        this.delegateId = delegateId;
    }

    public String getDelegateName() {
        return delegateName;
    }

    public void setDelegateName(String delegateName) {
        this.delegateName = delegateName;
    }

    @ManyToMany
    @JoinTable(name = "JOIN_DELEGATE_EVENT", joinColumns = {
        @JoinColumn(name = "delegateId")
    }, inverseJoinColumns = {
        @JoinColumn(name = "eventId")
    })
    public List<Event> getEvents() {
        return events;
    }

    public void setEvents(List<Event> events) {
        this.events = events;
    }
}

EventTest.java
package com.test;

import static org.junit.Assert.*;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class EventTest {

    static EntityManagerFactory entityManagerFactory;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        entityManagerFactory = Persistence
                .createEntityManagerFactory("org.hibernate.tutorial.jpa");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        entityManagerFactory.close();
    }

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void test() {
        EntityManager entityManager = entityManagerFactory
                .createEntityManager();
        entityManager.getTransaction().begin();

        try {
            Delegate d1 = new Delegate();
            d1.setDelegateName("d1");
            Delegate d2 = new Delegate();
            d2.setDelegateName("d2");
            Delegate d3 = new Delegate();
            d3.setDelegateName("d3");
            Delegate d4 = new Delegate();
            d4.setDelegateName("d4");

            Event e1 = new Event();
            e1.setEventName("java");
            Event e2 = new Event();
            e2.setEventName("c#");
            Event e3 = new Event();
            e3.setEventName("vb");

            e1.getDelegates().add(d1);
            e1.getDelegates().add(d2);
            e2.getDelegates().add(d2);
            e2.getDelegates().add(d3);
            e3.getDelegates().add(d3);
            e3.getDelegates().add(d4);

            entityManager.persist(e1);
            entityManager.persist(e2);
            entityManager.persist(e3);
            entityManager.persist(d1);
            entityManager.persist(d2);
            entityManager.persist(d3);
            entityManager.persist(d4);

            entityManager.getTransaction().commit();
        }
        catch (Exception e) {
            entityManager.getTransaction().rollback();
        }
    }
}

Delegate.sql
create table Delegate 
(
    delegateId int4 not null, 
    delegateName varchar(255), 
    primary key (delegateId)
)
delegateid delegatename
4 d1
5 d2
6 d3
7 d4
Event.java
create table Event 
(
    eventId int4 not null, 
    eventName varchar(255), 
    primary key (eventId)
)
eventid eventname
1 java
2 c#
3 vb
JOIN_DELEGATE_EVENT.java
create table JOIN_DELEGATE_EVENT 
(
    delegateId int4 not null, 
    eventId int4 not null
)
delegateid eventid
4 1
5 1
5 2
6 2
6 3
7 3

0 件のコメント:

コメントを投稿

ホームページ