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

    新建两个类,Husband.java和Wife.java两个类的id号是一一对应的,用面向对象的方式是加引用,单向关联就是只在其中一个加引用,在数据库中怎么设计呢?

    第一种是在husband里面加一个外键,在生成husband的时候,必须去wife里面找一下这个id有没有,这叫主键关联,这样就保证的一对一的关系了。

    第二种,再加一个字段如wife_id,称为外键关联。以wife为主导,必须wife先有了id,wifeid才能有值。

    第三种,使用中间表,关联表。里面写husband_id,wife_id。

    husband.java

    package hjj.lch.hibernate.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    
    @Entity
    public class Husband {
        private int id;
        private String name;
        private Wife wife;
        
        @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
        public Wife getWife() {
            return wife;
        }
        public void setWife(Wife wife) {
            this.wife = wife;
        }
        
    
    }

    Wife.java

    package hjj.lch.hibernate.model;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Wife {
        private int id;
        private String name;
        
        @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;
        }
        
    
    }

    测试

    @Test
        public void testSchemaExport(){
            new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
        }

    后台结果:

    12:30:11,114  INFO SchemaExport:226 - Running hbm2ddl schema export
    12:30:11,114 DEBUG SchemaExport:242 - import file not found: /import.sql
    12:30:11,114  INFO SchemaExport:251 - exporting generated schema to database
    12:30:11,274 DEBUG SchemaExport:377 -
        alter table Husband
            drop
            foreign key FKAEEA401BD4D6367E
    12:30:11,454 DEBUG SchemaExport:377 -
        drop table if exists Husband
    12:30:11,474 DEBUG SchemaExport:377 -
        drop table if exists Wife
    12:30:11,504 DEBUG SchemaExport:377 -
        create table Husband (
            id integer not null auto_increment,
            name varchar(255),
            wife_id integer,
            primary key (id)
        )
    12:30:11,584 DEBUG SchemaExport:377 -
        create table Wife (
            id integer not null auto_increment,
            name varchar(255),
            primary key (id)
        )
    12:30:11,644 DEBUG SchemaExport:377 -
        alter table Husband
            add index FKAEEA401BD4D6367E (wife_id),
            add constraint FKAEEA401BD4D6367E
            foreign key (wife_id)
            references Wife (id)
    12:30:11,815  INFO SchemaExport:268 - schema export complete

    使用@JoinColumn(name="wifeId")可以改变属性名

    在xml里面单向关联怎么配?

    <many-to-one name="student" column="studentId" unique="true"></many-to-one>

    因为设置了unique="true",所以它就是一对一了。

  • 相关阅读:
    C语言博客05--指针
    网络1911、1912 D&S第2次作业--批改总结
    JAVA课程设计——愤怒的小鸟(个人)
    JAVA课程设计——愤怒的小鸟(团队)
    网络1911、1912 C语言第1次作业批改总结
    Python--安装第三方库的方法
    Eclipse中文插件安装教程
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
  • 原文地址:https://www.cnblogs.com/ligui989/p/3465189.html
Copyright © 2011-2022 走看看