您的位置:首页 > 其它

Hibernate-4种常用主键生成策略 以及1对1关联

2015-08-27 08:23 507 查看
Id选择

uuid(32为的字符串)     native(本地的数据库)     sequence (序列,oracle会自动帮我们生成序列)   identity(自动增加)

 @Id    -----表示这个是主键

 @GeneratValue  ----设置id的生成策略 四种(默认是native)Auto(相当于native)  identity  sequence  table

  里面有两个属性  

策略:strategy=GenerationType.IDENTITY    自动增加(mysql数据库,或者是sql server)

           strategy=GenerationType.SEQUENCE     序列 (oracle) 可以指定sequence

            在类头+   @SequenceGenerator(name="generator",sequenceName="sequenct")   ----name指的是生成器的名字

                                                                                                                                       ----sequenceName数据库里面的sequen的名字

            例子 

          

         


        

            如果没有指定sequence,那么全部都用一个,如果有指定,那就用指定的哪个

         

@strategy=GenerationType.TABLE

          @TableGenerator   用表来生成主键(不常用)

         


                 name  生成器的名字

                 table 表名

                 pkColumName=“key”    字段名叫key

                 valueColunmName= “value”    字段名叫value

                 pkColunmValue =“teacher”     在key里面添加一个数据叫teacher

                 allocationsize=1                      在value对应的teacher值每次自动增加1 

                

                 hibernate取的时候是现在key里面找个字段是key里面是teacher的这一条数据对应的value取出来并且自增1

   

         

           strategy=GenerationType.NATIVE  本地,默认是native(hibernate会根据你使用的数据库帮你选择)

一对一

主键关联,外键关联,中间表(很少用)

主键关联:2个表共用同一个主键

外键关联:在2个表中其中一个表中加外键

中间表:关联表,里面存两张表的主键

1对1 外键关联

@OneToOne   对应关系

@JoinColumn  连接的字段

@JoinColumn(name="xxid")

如果是一对一 双向,hibernate会帮你生成2个外键

@OneToOne(mappedBy="a")  告诉hibernate  在a和b中,在b中已经做了映射了,

 就是说在数据库中b表有外键,a表不会有外键

public  class A{

        private int id

        @ OneToOne

        private B  b

}

public  class B{

        private int id

        @ OneToOne(mappedBy="b") //告诉hibernate 外键已经由A中的b对象实现了

        private A a

}

这时候如果用hibernate生成表的话  外键就只会存在a表中 

1对1 主键关联

public  class A{

        private int id

        @ OneToOne

        private B  b

}

public  class B{

        private int id

        @ OneToOne(mappedBy="b")

        @PrimaryKeyJoinColumn(name=“b”)

        private A a

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: