(4)OneToOne联合单向外键关联: @JoinColumns

来源:互联网 发布:cmmi软件成熟度模型 编辑:程序博客网 时间:2024/06/05 14:59

Wife中是联合主键
在利用@IdClass(WifePK.class)方式时,主键类(WifePK)中的属性和Wife中的属性要相同

@Entity@IdClass(WifePK.class)public class Wife {    private int id;    private String name;    @Id    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    @Id    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }   }

主键类

public class WifePK implements Serializable{    private int id;    private String name;    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;    }    @Override    public int hashCode() {        return id*10+name.hashCode();    }    @Override    public boolean equals(Object obj) {        if(obj instanceof WifePK){            WifePK pk=(WifePK) obj;            if(pk.id==this.id&&pk.name==this.name)            {                return false;            }        }        return true;    }}

husband类

@Entitypublic class Husband {    private int id;    private String name;    private int age;    private Wife wife;    @Id    @GeneratedValue    /*     * 使用@Id注解可以将属性标识为id,一般情况让hibernate自动生成策略来生成主键     * 这种写法:会自动根据数据库类型,生成不同的自增长。在mysql中是auto_increment     * 在oracle中是sequence     * 所以主键要有两个注解     */    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;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @OneToOne//Husband 与Wife 是一一对应关系    @JoinColumns(    {            @JoinColumn(name="wifeid",referencedColumnName ="id") ,            @JoinColumn(name="wifeName",referencedColumnName ="name")     })    public Wife getWife() {        return wife;    }    public void setWife(Wife wife) {        this.wife = wife;    }}

@JoinColumns:即 @JoinColumn数组,定义了关联的组合外键,显式指明referencedColumnNames是种好的实践方式。若不指定,默认生成策略是wi_id wi_name ,@JoinColumn设置name,只是重命名而已

阅读全文
0 0
原创粉丝点击