为了账号安全,请及时绑定邮箱和手机立即绑定
  • 一对一单向外键关联(二)

    如何向数据库中保存一对一单向外键的数据表

    //先生成一个身份证对象-外键表

    IdCard card = new IdCard("123456789012345678","张敬岭");

    //再生成学生对象-主表,如果Date类型是util中的则插入不了数据,换成sql的就可以了,原因是hibernate和数据库的不兼容

    Students s = new Students(card,"男",new Date(),"太极拳");


    //先保存身份证类再保存students

    session.save(card);

    session.save(s);


    查看全部
  • 一对一单向外键:(写在主表内)

    @oneToOne(cascade=CascadeType.ALL)

    cascade:级联关系

    CascadeType.ALL:全级联关系-----级联删除,级联更新,级联添加

    @JoinColumn(name="pid",unique=true)

    name:主表的外键,unique:外键也是唯一的

    注意:先保存外键对象,再保存主表对象

    顺序:

    1,编写Students实体类(必须添加@Entity注解才能在数据库创建表)

    2,编写IdCard实体类(pid,pname)

         @Entity设置实体类,   

    @Id

    @GeneratedValue(generator="pid")

    @GenericGenerator(name="pid",strategy="assigned")

    @Column(length=18)

     设置主键

         设置构造函数,getset等

    3,将IdCard类当做Students的属性,并在此属性的get方法上设置外键主键

    @OneToOne(cascade=CascadeType.ALL)

    @JoinColumn(name="pid",unique=true)

    4,配置xml文件,映射类

    5,编写测试文件,SchemaExport生成数据表

    查看全部
  • 实体间的映射关系:

    一对一:一个公民对应一个身份证号码

    一对多(多对一):一个公民有多个银行账号

    多对多:一个学生有多个老师,一个老师有多个学生

    查看全部
  • 关系映射级别注解:

    1,一对一单向外键

    2,一对一双向外键关联

    3,一对一单向外键联合主键

    4,多对一单向外键关联

    5,一对多单向外键关联

    6,一对多双向外键关联

    7,多对多单向外键关联

    8,多对多双向外键关联

    查看全部
  • @Transient:

    标识该属性不是一个到数据库表的字段的映射,ORM框架可以忽略该属性

    查看全部
  • @EmbeddedId:使用嵌入式主键类实现复合主键

    注意:嵌入式主键类必须实现Serializable接口,必须有默认的public无参数的构造方法,必须覆盖equals和hashCode方法

    创建一个类,此类中的字段是其他实体类的复合主键:

    public class StudentsPK implements Serializable{

     //实现序列化接口后最好设定一个序列化版本号

    //序列化版本号是为了反序列化成功而设置的,若是不想被反序列化则可以设置一个动态的版本号,可以到有道云笔记中查看

     private static final long serialVersionUID=1L;

      private String id;//身份证号码

      private String sid;//学号

      public StudentsPK(){}

      get/set方法

      equals和tostring方法

    }

    //测试

    首先标识嵌入类和嵌入类id

    然后给嵌入类赋值:StudentPK pk=new StudentPK();

    pk.setID("123345");pk.setSid("12345");

    然后再Students s=new Students(pk,"张三丰","男"。。。。);

    最后:session.save(s);tx.commit();


    查看全部
  • @embedded是注释属性的,表示该属性的类是嵌入类

    注意:同时嵌入类也必须标注@Embeddable注解

    查看全部
  • @Column注解:描述了数据库表中该字段的详细定义

    常用属性:

    name:默认属性和字段名一致,不一致则用此属性设置

    nullable:表示该字段是否允许为null,默认为true

    unique:表示该字段是否是唯一标识,默认为false

    length:标识该字段的大小,仅对string类型的字段有效,默认255

    insertable:表示在ORM框架执行插入操作时,该字段是否应该出现在INSERT语句中,默认为true

    updateable:表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对于一经创建就不可以更改的字段,该属性非常有用,比如birthday字段


    查看全部
  • 1,字符型主键使用

          public void addStudents(){

          //创建hibernate配置对象

           Configuration config = new Configuration().configure();

          //创建服务注册对象

           ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildService.........

           SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);

          //创建会话

           Session session = sessionFactory.getCurrentSession();

          //创建事务

           Transaction tx = session.beginTransaction();

          //创建一个学生对象

           Address add = new Address("700005","湖北武当山","13641095182");

           Students s = new Students("S0000001","张三丰","男",new Date(),"太极拳",add);

            session.save(s);

            tx.commit();

        }

    查看全部
  • 1,主键是整型的,就可以使用自动增长类型,auto(根据底层数据库自动选择)

         @Id

         @GeneratedValue(strategy=GenerationType.AUTO)//(主键策略,默认为auto)

         private int sid;

    2,主键是字符串类型,要么不写上@GeneratedValue,要么就用hibernate的注解而不是JPA的@GeneratedValue形式

         @Id

         @GeneratedValue(generator="sid")//先设置一个策略生成器

         @GenericGenerator(name="sid",strategy="assigned")//字符串主键生成策略

         @Column(length=8)

         private String sid;

    查看全部
  • 1,@GeneratedValue(strategy=GenerationType,generator="")

        设置主键的生成策略

    2,strategy表示主键生成策略,取值有:

         GenerationType.Auto:根据底层数据库自动选择(默认)

                                          必须是整型

         GenerationType.INDENTITY:根据数据库的Identity字段生成

         GenerationType.SEQUENCE:使用sequence来决定主键的取值

                                   oracle没有自动增长类型,类似的是序列

         GenerationType.TABLE:使用指定表来决定主键取值

                                   结合@TableGenerator使用

      3,使用:

              @Id

              @TableGenerator(name="tab_cat_gen",allocationSize=1)

              @GeneratedValue(Strategy=GenerationType.Table)

              Generator-表示主键生成器的名称,这个属性通常和ORM框架相关,例如:Hibernate可以指定uuid等主键生成方式

    查看全部
  • 1,@Id:如果有多个属性定义为主键属性,该实体类必须实现serializable接口(implements Serializable)

    2,若是作为主键的字段是字符串类型,那么必须设置好字段的长度才行

         因为如果不设置的话默认长度为255,但是mysql规定主键字段不能过长很明显255已经超出了限制

         这时候需要在字段上设置@Column(length=8)

    查看全部
  • @Id,@SequenceGenerator,@GeneratedValue,@Column,@Embedded,@EmbeddedId,@Lob,@Version,@Basic,@Transient

    查看全部
  • 1,@Embeddable:标识一个非Entity类可以嵌入到另一个Entity类中作为属性而存在----嵌入类

    2,@Embeddable标识的类作为一个实体类的属性存在时,在数据库的数据表中的表现是,会将嵌入类中的几个属性也作为字段

         比如实体类为student,嵌入类为address,address中有邮编,地址,联系电话三个字段,那么在数据表中就会存在此三个字段,而不是将address作为一个整体字段

    查看全部
  • 1,@Table注解 常用属性:name,catalog,schema

    2,shema属性和catalog属性,各个数据库支持不一致

         oracle: 不支持catalog,schema就是 oracle user ID

         mysql:不支持catalog,schema就是数据库名字

         sqlserver:catalog是数据库名,不支持schema

         DB2:不清楚

    3,@Table和@Entity配合使用

          @Entity

          @Table(name="student")

           public class student{


            }


    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程前,需要具备以下技能: 1、精通Java语法和面向对象思想。 2、掌握JDBC数据库开发流程 3、熟悉SQL语句
老师告诉你能学到什么?
1、掌握类级别注解、属性基本注解和关联映射注解 2、能够灵活应用Hibernate注解进行开发

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!