hibernate属性级别注解实例代码

 更新时间:2017年10月19日 09:58:46   作者:黄小鱼ZZZ  
这篇文章主要介绍了hibernate属性级别注解实例代码,涉及属性级别注释添加方式及种类,具有一定参考价值,需要的朋友可以了解下。

属性级别注解

添加方式:

        写在属性字段上面
写在属性的get访问器的上面

@Id

    必须,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射为主键,可置于主键属性或者getXxx()前,注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口

@SequenceGenerator
@GeneratedValue
  @GeneratedValue(strategy=GenerationType,generator=""):可选,用于定义主键生成策略

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

       GenerationType.AUTO:根据底层数据库自动选择(默认)
GenerationType.INDENTITY:根据数据库的Identity字段生成
GenerationType.SEQUENCE:使用Sequence来决定主键的取值
GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用

@Column

     @Column-可将属性映射到列,使用该注解来覆盖默认值,@Column描述了数据库表中该字段的详细定义,这对于根据JPA
注解生成数据库表结构的工具非常有作用。

常用属性:

name:可选,表示数据库表中该字段的名称,默认情形属性名称一致
nullable:可选,表示该字段是否允许为null,默认为true
unique:可选,表示该字段是否为唯一标识,默认为false
length:可选,表示该字段的大小,仅对String类型的字段有效,默认值225,主键不能使用默认值
insertable:可选,表示在ORM框架执行插入操作时,该字段是否应出现INSERTRT语句中,默认为true
updateable:可选,表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对于已经创建
就不可以更改的字段,该属性非常有用

@Embedded

@Embedded是注释属性的,表示该属性的类是嵌入类。

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

@EmbeddedId

@EmbeddedId使用嵌入式主键类实现复合主键

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

@Lob
@Version
@Basic
@Transient

      可选,表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性,如果一个属性并非数据库表的字段映射,就
务必将其标示为@Transient,否则ORM框架默认其注解为@Basic

实例:

hibernate.properties配置:

<!DOCTYPE hibernate-configuration PUBLIC 
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
 
<hibernate-configuration> 
  <session-factory> 
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <!--  
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql:///hibernate_struts_stumanager</property> 
     --> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mypage</property> 
     
     
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">root</property> 
    <property name="hibernate.show_sql">false</property> 
    <property name="hibernate.hbm2ddl.auto">create</property> 
  <!--   <property name="hibernate_current_session_context_class">thread</property> --> 
    <property name="current_session_context_class">thread</property> 
    <mapping class="com.entity.Students"/> 
  </session-factory> 
</hibernate-configuration> 

实体类Student:

package com.entity; 
import java.io.Serializable; 
import java.util.Date; 
import javax.persistence.Column; 
import javax.persistence.Embedded; 
import javax.persistence.EmbeddedId; 
import javax.persistence.Entity;//JPA注解 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.Transient; 
import org.hibernate.annotations.GenericGenerator; 
/* 
 * 学生实体类 
 */ 
//@Entity// 
//@Entity(name="t_students")//如果不添加名字,则默认与实体类名字相同,如果想要自行设置表明,就需要自己进行添加 
@Entity 
@Table(name="t_students1",schema="mypage") 
public class Students implements Serializable{ 
     @Id 
//    @GeneratedValue 
//    @GeneratedValue(strategy=GenerationType.AUTO)//与@GeneratedValue结果相同,字符串类型不能指定为AUTO类型 
//     private int sid; //学号 
//    @GeneratedValue(generator="sid") 
//    @GenericGenerator(name="sid",strategy="assigned") 
//    @Column(length=11) 
//    private String sid; 
     @EmbeddedId 
     private StudentPK pk; 
//    @Id 
//     
//    @Column(length=11) 
     private String sname;//姓名 
     private String gender;//性别 
     private Date birthday;//出生日期 
     private String major;//专业 
     private Address add; 
     @Transient   //表示该字段不会被ORM映射到表里的字段 
     private double salary;//薪水 
     public Students(){ 
     } 
    public Students(StudentPK pk, String sname, String gender, 
        Date date, String major,Address add,double salary) { 
//     super(); 
      this.pk = pk; 
      this.sname = sname; 
      this.gender = gender; 
      this.birthday = date; 
      this.major = major; 
      this.add = add; 
      this.salary = salary; 
    } 
    public StudentPK getPk() { 
      return pk; 
    } 
    public void setPk(StudentPK pk) { 
      this.pk = pk; 
    } 
    public String getSname() { 
      return sname; 
    } 
    public void setSname(String sname) { 
      this.sname = sname; 
    } 
    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; 
    } 
    public Address getAdd() { 
      return add; 
    } 
    public void setAdd(Address add) { 
      this.add = add; 
    } 
    public double getSalary() { 
      return salary; 
    } 
    public void setSalary(double salary) { 
      this.salary = salary; 
    } 
      
} 

StudentPK实体类:

package com.entity; 
import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Embeddable; 
@Embeddable 
public class StudentPK implements Serializable{ 
    /** 
   * 
   */ 
  private static final long serialVersionUID = 1L; 
  @Column(length=18) 
  private String id;//身份证号 
  @Column(length=8) 
    private String sid;//学号 
    public StudentPK(){ 
    } 
  public StudentPK(String id, String sid) { 
    this.id = id; 
    this.sid = sid; 
  } 
  public String getId() { 
    return id; 
  } 
  public void setId(String id) { 
    this.id = id; 
  } 
  public String getSid() { 
    return sid; 
  } 
  public void setSid(String sid) { 
    this.sid = sid; 
  } 
  @Override 
  public boolean equals(Object obj) { 
    // TODO Auto-generated method stub 
    return super.equals(obj); 
  } 
  @Override 
  public int hashCode() { 
    // TODO Auto-generated method stub 
    return super.hashCode(); 
  } 
} 

地址类:

package com.entity; 
import javax.persistence.Embeddable; 
import javax.persistence.Embedded; 
// 地址类 
@Embeddable //表示是一个嵌入类,这个类的对象在另一个实体类中充当属性  
public class Address { 
   private String postCode;//邮编 
   private String address;//地址 
   private String phone;//联系电话 
   public Address(){ 
   } 
    
  public Address(String postCode, String address, String phone) { 
    this.postCode = postCode; 
    this.address = address; 
    this.phone = phone; 
  } 
 
  public String getPostCode() { 
    return postCode; 
  } 
  public void setPostCode(String postCode) { 
    this.postCode = postCode; 
  } 
  @Embedded 
  public String getAddress() { 
    return address; 
  } 
  public void setAddress(String address) { 
    this.address = address; 
  } 
  public String getPhone() { 
    return phone; 
  } 
  public void setPhone(String phone) { 
    this.phone = phone; 
  } 
    
} 

测试类:

package com.entity; 
 
import java.util.Date; 
import java.util.EnumSet; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 
import org.hibernate.tool.hbm2ddl.SchemaExport; 
import org.junit.Test; 
public class TestStudents { 
  @Test 
    public void testShemaExport(){ 
      //创建hibernate配置对象 
      Configuration config = new Configuration().configure(); 
      //创建服务注册对象 
      ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); 
      //生成SessionFactory 
      SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry); 
      SchemaExport export = new SchemaExport(config); 
      export.create(true,true); 
    } 
  @Test 
  public void addStudents(){ 
     //创建hibernate配置对象 
    Configuration config = new Configuration().configure(); 
    //创建服务注册对象 
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); 
    //生成SessionFactory 
    SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry); 
    //创建会话 
    Session session = sessionFactory.getCurrentSession(); 
    //创建事务 
    Transaction tx = session.beginTransaction(); 
    Address add = new Address("700005","河南理工大学","15039117115"); 
    StudentPK pk = new StudentPK("012345678912345678","55555555"); 
    Students s = new Students(pk,"张三丰","男",new Date(),"太极拳",add,7899); 
    session.save(s); 
    tx.commit(); 
//   SchemaExport export = new SchemaExport(config); 
//    export.create(true,true); 
  } 
} 

总结

以上就是本文关于hibernate属性级别注解实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Hibernate核心思想与接口简介Hibernate实现悲观锁和乐观锁代码介绍快速了解hibernate配置文件与映射文件等。正所谓书中自有颜如玉,下面附几本不错的书籍,供大家学习参考,在此也非常希望大家对本站多多支持。

一键下载,免费的哦:

hibernate官方入门教程 中文PDF版

https://www.jb51.net/books/496598.html

Java设计模式深入研究 PDF

https://www.jb51.net/books/581548.html

数据挖掘:实用机器学习技术及Java实现(英文第2版)高清PDF

https://www.jb51.net/books/577815.html

相关文章

  • Spring MVC Controller传递枚举值的实例

    Spring MVC Controller传递枚举值的实例

    这篇文章主要介绍了Spring MVC Controller传递枚举值的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Maven指令打包SpringBoot项目提示没有主清单文件问题

    Maven指令打包SpringBoot项目提示没有主清单文件问题

    在Java开发中,打包Jar时常会遇到“没有主清单属性”的错误,这通常是因为在pom.xml文件中没有正确配置maven插件导致的,特别是在使用自定义的<parent/>节点而非spring-boot-starter-parent时
    2024-09-09
  • 浅谈spring boot 1.5.4 异常控制

    浅谈spring boot 1.5.4 异常控制

    下面小编就为大家带来一篇浅谈spring boot 1.5.4 异常控制。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • IDEA2020.2.3中创建JavaWeb工程的完整步骤记录

    IDEA2020.2.3中创建JavaWeb工程的完整步骤记录

    这篇文章主要给大家介绍了关于IDEA2020.2.3中创建JavaWeb工程的完整步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java实现超大文件的读写功能

    java实现超大文件的读写功能

    这篇文章主要为大家详细介绍了java实现超大文件的读写功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Java中的ConcurrentHashMap集合源码解析

    Java中的ConcurrentHashMap集合源码解析

    这篇文章主要介绍了Java中的ConcurrentHashMap集合源码解析,ConcurrentHashMap底层容器和HashMap相同,同样是Node数组+链表+红黑树,不同的是在原来的基础之上使用了Synchronized+CAS来保证线程安全,下面我们来进行源码分析,需要的朋友可以参考下
    2023-11-11
  • 基于Jenkins搭建.NET FrameWork持续集成环境

    基于Jenkins搭建.NET FrameWork持续集成环境

    这篇文章主要介绍了基于Jenkins搭建.NET FrameWork持续集成环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • JDK 7 新特性小结实例代码解析

    JDK 7 新特性小结实例代码解析

    这篇文章通过实例代码给大家介绍了JDK 7 新特性小结篇,感兴趣的朋友一起看看吧
    2018-03-03
  • Apache Dubbo的SPI机制是如何实现的

    Apache Dubbo的SPI机制是如何实现的

    SPI全称为Service Provider Interface,对应中文为服务发现机制。SPI类似一种可插拔机制,首先需要定义一个接口或一个约定,然后不同的场景可以对其进行实现,调用方在使用的时候无需过多关注具体的实现细节。在Java中,SPI体现了面向接口编程的思想,满足开闭设计原则。
    2021-06-06
  • Java基础教程之接口的继承与抽象类

    Java基础教程之接口的继承与抽象类

    这篇文章主要介绍了Java基础教程之接口的继承与抽象类,本文介绍了接口继承、接口的多重继承以及抽象类的知识,需要的朋友可以参考下
    2014-09-09

最新评论