Hibernate 实体关系映射(未完成版)

来源:互联网 发布:淘宝商品出售编辑 编辑:程序博客网 时间:2024/06/05 00:30
1. 主键相同的一对一映射例如:用户的基本信息-->用户的登录密码用户基本信息的id和用户登录密码的id一致使用的是@OneToOne和@PrimaryKeyColumn如下(set(),get()省略)
@Entity(name="userinformation")    public class UserInformation {        @Id        @GeneratedValue(strategy=GenerationType.AUTO)        private Integer id;        @Column(unique=true,nullable=false,length=11)        private String phone;        @OneToOne        @PrimaryKeyJoinColumn        private UserPassword userPassword;    }
    @Entity(name="userpassword")    public class UserPassword {        @Id        private Integer id;        @Column(length=20,nullable=false)        private String password;        @OneToOne        @PrimaryKeyJoinColumn        private UserInformation userInformation;    }
userPassword中id保存到数据库的时候,保存的是userInformation的getId()例如
    Userinformation ui=new UserInformation();    ui.setPhone("123");    UserPassword up=new UserPassword();    up.setId(u.getId());    up.setPassword("1234");    session.save(ui) ;    session.save(up);
Ps :需要注意的是,不能使用数据库的自动分配id,自动分配id会导致2个实体对象的id不一致,需要收到获取另外一个的id,然后将获取到的id赋值为该对象的id。2. 双边的一对多,对对一关系例如:一个用户可以发表多条影评用户实体->影评实体用户中,使用的是@OneToMany,影评中使用的是@ManyToOneUserInformation.java中
@OneToMany(mappedBy="userinformation")//注意,mappedBy中的字符串对应PublishCritic中的变量名    private List<PublishCritic> publishCritics;
PublishCritic.java中
@ManyToOne(fetch=FetchType.EAGER,cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.REMOVE})//FetchType.EAGER设置为即时加载,casade为级联    @JoinColumn(name="uid",nullable=false)//name表示为该表中外键名为id,该外键指向userinformation表的id    private UserInformation userinformation;
ps:注意每个类中记得设置set()和get()
0 0
原创粉丝点击