zoukankan      html  css  js  c++  java
  • hibernate一对一单向外键关联

    Husband类里有一个Wife类的引用

    wife类:

    package com.oracle.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Wife {
    
        
        private int id;
        private int age;
        @Id
        @GeneratedValue
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
        
    }

    Husband类:

    package com.oracle.hibernate;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinColumns;
    import javax.persistence.OneToOne;
    
    @Entity
    public class Husband {
    
        private int id;
        private String name;
        private Wife  wife;    //wife的引用
        
        @Id    //主键id
        @GeneratedValue    //自动生成
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        @OneToOne    //一对一映射
        //JoinColumn指定映射到表里哪个字段,不指定会自动生成的外键名为wife_id
        @JoinColumn(name="wifeId")
        public Wife getWife() {
            return wife;
        }
        public void setWife(Wife wife) {
            this.wife = wife;
        }
    }

    hibernate.cfg.xml映射文件:

    <mapping class="com.oracle.hibernate.Wife"/>
    <mapping class="com.oracle.hibernate.Husband"/> 

    junit测试类生成表的代码:

    package com.oracle.hibernate;
    
    import org.hibernate.HibernateException;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    
    
    
    public class Test {
    
        private static SessionFactory  sf = null;
        @BeforeClass
        public static void beforeClass(){
            
            try {
                sf = new AnnotationConfiguration().configure().buildSessionFactory();
            } catch (HibernateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        @org.junit.Test
        public void testSchemaExport(){
            new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
            
        }
        @AfterClass
        public static void afterClass(){
            sf.close();
        }
    
    }

    生成的表:

    hibernate生成表的语句:

     create table Husband (
            id integer not null auto_increment,
            name varchar(255),
            wifeId integer,
            primary key (id)
        )
    21:52:31,236 DEBUG SchemaExport:377 - 
        create table Wife (
            id integer not null auto_increment,
            age integer not null,
            primary key (id)
        )
    21:52:31,582 DEBUG SchemaExport:377 - 
        alter table Husband 
            add index FKAEEA401B796894FC (wifeId), 
            add constraint FKAEEA401B796894FC 
            foreign key (wifeId) 
            references Wife (id)

    可以看到,生成的husband表里外键wife名字已是wifeId

  • 相关阅读:
    Xpath注入攻击及其防御技术研究
    警言201003
    linux命令0423
    tomcat 和myeclipse 怎么不和谐啊
    JAVA环境变量
    笑话201003
    linux 下安装qt
    Myeclipse,tomcat
    惜福
    Windows 下用reg 文件将exe 写入启动项
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/4915702.html
Copyright © 2011-2022 走看看