zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/alsf/p/7827971.html
Copyright © 2011-2022 走看看