• 04-hibernate注解-一对一双向外键关联


    一对一双向外键

    1,主控方的配置同一对一单向外键关联。

    2,@OneToOne(mappedBy="card")  //被控方

    @OneToOne(mappedBy="card") //mappedBy所对应的是主控方外键属性的值

    双向关联,必须设置mappedBy属性,因为双向关联只能交给一方去控制,不可能在双方都设置外键保存关联关系,否则双方都无法保存

    主控方类代码不用修改:

    package oto_bfk;
    
    import java.util.Date;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Entity;/*JPA主键*/
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;
    
    /*学生实体类*/
    @Entity
    @Table(name="Students",schema="sys")
    public class Students {
        
        private IdCard card;//身份证对象
        
        private int sid;
        private String gender;//性别
        private Date birthday;
        private String major;//专业
        
        public Students()
        {
            
        }
        
        public Students(IdCard card, String gender, Date birthday, String major) {
            //super();
            this.card=card;
            this.gender = gender;
            this.birthday = birthday;
            this.major = major;
        }
    
        @Id
        @GeneratedValue //主键自动增长
        public int getSid() {
            return sid;
        }
        public void setSid(int sid) {
            this.sid = sid;
        }
        @OneToOne(cascade=CascadeType.ALL)//全级联的级联关系
        @JoinColumn(name="pid",unique=true)//被控类对应的主键为pid
        public IdCard getCard() {
            return card;
        }
    
        public void setCard(IdCard card) {
            this.card = card;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public String getMajor() {
            return major;
        }
    
        public void setMajor(String major) {
            this.major = major;
        }
    }

    被控方的代码修改如下:

    需要注意的是:@OneToOne(mappedBy="card") //mappedBy所对应的是主控方外键属性的值

    package oto_bfk;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToOne;
    
    import org.hibernate.annotations.GenericGenerator;
    
    /*身份证类*/
    @Entity
    public class IdCard {
    
        @Id
        @GeneratedValue(generator="pid")//指定一个生成器为pid
        @GenericGenerator(name="pid",strategy="assigned")//构建一个生成器,生成策略strategy为手工赋值
        @Column(length=18)
        private String pid;//身份证号码
        private String sname;//学生姓名
        
        @OneToOne(mappedBy="card") //mappedBy所对应的是主控方外键属性的值。
        private Students stu;
        
        public IdCard()
        {
            
        }
        public IdCard(String pid, String sname) {
            //super();
            this.pid = pid;
            this.sname = sname;
        }
    
        public String getPid() {
            return pid;
        }
        public void setPid(String pid) {
            this.pid = pid;
        }
        public String getSname() {
            return sname;
        }
        public void setSname(String sname) {
            this.sname = sname;
        }
        public Students getStu() {
            return stu;
        }
        public void setStu(Students stu) {
            this.stu = stu;
        }
    }

    一对一双向外键联合主键

    1,创建主键类

    2,主键类必须实现serialization接口,重写hashcode()和equals()方法。

    主键类

    @Embeddable

    实体类

    @EmbeddedId

    这个可以参考前面的属性注解。

    http://www.cnblogs.com/alsf/p/7823134.html

  • 相关阅读:
    cmd输入输出重定向
    【转载】标准输入输出、错误输出、重定向标准输出
    cmd 重定向
    Windows下cmd标准输入输出重定向
    Windows 命令行输入输出重定向问题
    MATLAB数值计算与符号运算
    选择排序法 冒泡排序法 本质上是对内存进行整理
    学习笔记:Monkey runner(一)
    Monkey test
    fiddler:快速标识接口
  • 原文地址:https://www.cnblogs.com/alsf/p/7827971.html
Copyright © 2020-2023  润新知