<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開(kāi)發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    基于JPA的CRUD(OneToMany)

    先建數(shù)據(jù)庫(kù):
    use test;

    create table person
    (
    id 
    int primary key AUTO_INCREMENT,
    username varchar(
    20) not null,
    password varchar(
    20) not null
    );

    create table mail
    (
    id 
    int primary KEY AUTO_INCREMENT,
    email varchar(
    50) not null,
    pid 
    int null
    );
    select 
    * from person;
    select 
    * from mail;
    Person表和Mail表不存在物理方面的OneToMany關(guān)系,這
    種關(guān)系是通過(guò)Hibernate來(lái)維護(hù)的.
    hibernate.cgf.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        
    <session-factory>
            
    <property name="dialect">
                org.hibernate.dialect.MySQLDialect
            
    </property>
            
    <property name="show_sql">true</property>
            
    <property name="myeclipse.connection.profile">mysql</property>
            
    <property name="connection.url">
                jdbc:mysql:
    //localhost/test
            </property>
            
    <property name="connection.username">root</property>
            
    <property name="connection.password">root</property>
            
    <property name="connection.driver_class">
                com.mysql.jdbc.Driver
            
    </property>
            
    <property name="transaction.flush_before_completion">true</property>
            
    <mapping class="com.vo.Person" />
            
    <mapping class="com.vo.Mail" />
        
    </session-factory>
    </hibernate-configuration>

    Person.java:
    package com.vo;

    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;

    @SuppressWarnings(
    "serial")
    @Entity
    @Table(name 
    = "person")
    public class Person implements Serializable
    {
        
        
    private Integer id;
        
    private String username;
        
    private String password;
        
    private Set<Mail> mails = new HashSet<Mail>();
        @OneToMany(cascade
    =CascadeType.ALL,fetch=FetchType.LAZY) //映射為單一對(duì)多關(guān)系
        
    //@Basic(fetch=FetchType.LAZY) //和上面的fecth一樣的效果,都是延時(shí)初始
        @JoinColumn(name="pid")             //加入要映射的列(外鍵列)
        public Set<Mail> getMails()
        
    {
            
    return mails;
        }


        
    public void setMails(Set<Mail> mails)
        
    {
            
    this.mails = mails;
        }

        @Id
        @GeneratedValue(strategy 
    = GenerationType.AUTO)
        @Column(name
    ="id")
        
    public Integer getId()
        
    {
            
    return id;
        }


        
    public void setId(Integer id)
        
    {
            
    this.id = id;
        }


        
    public String getUsername()
        
    {
            
    return username;
        }

        @Column(name
    ="username",nullable=false)
        
    public void setUsername(String username)
        
    {
            
    this.username = username;
        }

        @Column(name
    ="password",nullable=false)
        
    public String getPassword()
        
    {
            
    return password;
        }


        
    public void setPassword(String password)
        
    {
            
    this.password = password;
        }

    }


    Mail.java:
    package com.vo;

    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.Table;

    @SuppressWarnings(
    "serial")
    @Entity
    @Table(name 
    = "mail")
    public class Mail implements Serializable
    {
        
        
    private Integer id;
        
    private String email;

        @Id
        @GeneratedValue(strategy 
    = GenerationType.AUTO)
        @Column(name
    ="id")
        
    public Integer getId()
        
    {
            
    return id;
        }


        
    public void setId(Integer id)
        
    {
            
    this.id = id;
        }

        @Column(name
    ="email",nullable=false)
        
    public String getEmail()
        
    {
            
    return email;
        }


        
    public void setEmail(String email)
        
    {
            
    this.email = email;
        }

    }


    測(cè)試類:
    package com.test;

    import java.util.Iterator;
    import java.util.Set;

    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;

    import com.vo.Mail;
    import com.vo.Person;

    public class PersonTest
    {
        
    private Session session;
        
    private Transaction transaction;

        @Before
        
    public void before()
        
    {
            session 
    = new AnnotationConfiguration().configure()
                    .buildSessionFactory().openSession();
            transaction 
    = session.getTransaction();
        }


        @After
        
    public void after()
        
    {
            session.close();
        }

        
        @Test
        
    public void save()
        
    {
            transaction.begin();
            Person person 
    = new Person();
            person.setUsername(
    "zdw");
            person.setPassword(
    "admin");
            
            Mail m1 
    = new Mail();
            m1.setEmail(
    "a@live.com");
            Mail m2 
    = new Mail();
            m2.setEmail(
    "b@live.com");
            
            person.getMails().add(m1);
            person.getMails().add(m2);
            session.save(person);
            transaction.commit();
        }

        
        
        @Test
        
    public void findById()
        
    {
            Person person 
    = (Person) session.load(Person.class1);
            Set
    <Mail> mails = person.getMails();
            
    if(mails.size() > 0)
            
    {
                
    for(Iterator<Mail> i = mails.iterator(); i .hasNext();)
                
    {
                    Mail m 
    = i.next();
                    System.out.println(m.getEmail());
                }

            }

        }

        
        
        @Test
        
    public void delete()
        
    {
            transaction.begin();
            Person person 
    = (Person) session.load(Person.class1);
            session.delete(person);
            transaction.commit();
        }

    }

        

    源碼可在我的網(wǎng)盤(pán)下載.
    點(diǎn)此下載

    posted on 2007-11-30 15:42 々上善若水々 閱讀(9160) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 亚洲日本香蕉视频| 亚洲日日做天天做日日谢| 久久精品亚洲精品国产色婷| 亚洲经典在线观看| 亚洲欧美日韩久久精品| 五月天婷婷免费视频| 久久久久久久岛国免费播放| 久久久久免费看黄A片APP| 国产人成免费视频| 国产av无码专区亚洲av桃花庵| 亚洲高清视频免费| 亚洲а∨精品天堂在线| 国产精品1024在线永久免费| 中文字幕在线免费| 又大又黄又粗又爽的免费视频| 亚洲精品二区国产综合野狼| 亚洲成综合人影院在院播放| 国产精品亚洲专区一区| 永久免费av无码网站yy| 好男人www免费高清视频在线| 全亚洲最新黄色特级网站 | 亚洲成人高清在线观看| 激情无码亚洲一区二区三区| a级毛片高清免费视频就| 中国在线观看免费国语版| 亚洲精品成人在线| 亚洲国产成人久久99精品| 色爽黄1000部免费软件下载| 99免费在线观看视频| 免费国产高清视频| 久久亚洲精品成人无码网站| 精品特级一级毛片免费观看| 最近2019中文字幕免费大全5 | 亚洲国产成人一区二区精品区| 国产成+人+综合+亚洲专| 久久久受www免费人成| 成年女性特黄午夜视频免费看| 国产亚洲综合久久系列| 亚洲AV日韩AV永久无码色欲| 免费国产黄网站在线观看可以下载 | 久久久久久毛片免费播放|