• 一对一单向外键关联


    新建两个类,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",所以它就是一对一了。

  • 相关阅读:
    序列化
    python_模块与包
    python_常用内置模块
    python_生成器
    python_文件操作
    你好,mysql
    2017年12月20日 内置对象
    2017年12月17日 ASP.NET 12个表单元素&&简单控件/复合控件
    2017年12月16日 ASP.NET基本用法
    2017年12月14日 LinQ高级查&&Asp.net WebForm Asp.net MVC
  • 原文地址:https://www.cnblogs.com/ligui989/p/3465189.html
Copyright © 2020-2023  润新知