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版

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

Java设计模式深入研究 PDF

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

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

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

(0)

相关推荐

  • 详解Java的Hibernate框架中的注解与缓存

    注解 Hibernate注解是一个没有使用XML文件来定义映射的最新方法.可以在除或替换的XML映射元数据使用注解. Hibernate的注解是强大的方式来提供元数据对象和关系表的映射.所有的元数据被杵到一起的代码POJO java文件这可以帮助用户在开发过程中同时要了解表的结构和POJO. 如果打算让应用程序移植到其他EJB3规范的ORM应用程序,必须使用注解来表示映射信息,但仍然如果想要更大的灵活性,那么应该使用基于XML的映射去. 环境设置Hibernate注释 首先,必须确保使用的是JD

  • java扩展Hibernate注解支持java8新时间类型

    扩展Hibernate注解@CreationTimestamp,@UpdateTimestamp支持Java8新的时间类型Hibernate version: 4.3.5.Final 复制代码 代码如下: package com.hibernate.annotation; import org.hibernate.HibernateException;import org.hibernate.tuple.AnnotationValueGeneration;import org.hibernate

  • java hibernate使用注解来定义联合主键

    java  hibernate使用注解来定义联合主键 下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键 下面取至hibernate的API文档: 定义组合主键的几种语法: 1.将组件类注解为@Embeddable,并将组件的属性注解为@Id 2.将组件的属性注解为@EmbeddedId 3.将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id 下面就分别使用这三种方式来定义联合主键. 建表的SQL语

  • hibernate属性级别注解实例代码

    属性级别注解 添加方式: 写在属性字段上面 写在属性的get访问器的上面 @Id 必须,定义了映射到数据库表的主键的属性,一个实体类可以有一个或者多个属性被映射为主键,可置于主键属性或者getXxx()前,注意:如果有多个属性定义为主键属性,该实体类必须实现serializable接口 @SequenceGenerator @GeneratedValue   @GeneratedValue(strategy=GenerationType,generator=""):可选,用于定义主键生

  • hibernate多表操作实例代码

    多表操作之多对多关系简介 思路就是: 在数据库底层通过添加中间表来指定关联关系. 在双方的实体中添加一个保存对方的集合 在双方的配置文件中使用set标签和many-to-many标签来进行关联关系的配置.即可完成! 调用Hibernate的相关的API,操作就行了. 需要注意的地方 首先是数据库中表的创建 这里有一个小例子: 多对多的核心表,第三方表.table: create table thrid( one_id int not null, two_id int not null, cons

  • java 反射和动态代理详解及实例代码

    一.java中的反射 1.通过反射加载类的属性和方法实例代码: /** * java.lang.Class 是反射的源头 * 我们创建了一个类,通过编译(javac.exe)生成对应的class文件,之后我们通过java.exe加载(jvm的类加载器加载)此class文件 * 此class文件加载到内存后,就是一个运行时类,存在缓存区,这个运行时类本事就是一个Class的实例 * 每一个运行时类只加载一次, */ Class<StudentExam> clazz = StudentExam.c

  • Java之Spring注解配置bean实例代码解析

    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的.故而,请使用注解配置bean !!! [1]注解类别 @Component : 基本注解, 标识了一个受 Spring(点击这里可以下载<Spring应用开发完全手册>) 管理的组件 @Repository : 标识持久层组件 @Service : 标识服务层(业务层)组件 @Controller : 标识表现层组件 Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 对于扫描到的组

  • Spring AOP 基于注解详解及实例代码

    Spring AOP  基于注解详解及实例代码 1.启用spring对@AspectJ注解的支持: <beans xmlns:aop="http://www.springframework.org/schema/aop"...> <!--启动支持--> <aop:aspectj-autoproxy /> </beans> 也可以配置AnnotationAwareAspectJAutoProxyCreator Bean来启动Spring对@

  • Mybatis基于注解形式的sql语句生成实例代码

    对其做了些优化,但此种sql生成方式仅适用于复杂程度不高的sql,所以实用性不是很高,仅仅是写着玩的,知道点mybatis的注解形式的使用方式,可能以后会逐渐完善起来.第一次写博客,写的简单点. package com.bob.config.mvc.mybatis; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retenti

  • Hibernate缓存机制实例代码解析

    本文研究的主要是Hibernate缓存机制的相关内容,具体如下. 演示项目: Student.java: public class Student { /*学生ID*/ private int id; /*学生姓名*/ private String name; /*学生和班级的关系*/ private Classes classes; //省略setter和getter方法 } Classes.java: public class Classes { /*班级ID*/ private int i

  • Spring AOP  基于注解详解及实例代码

    Spring AOP  基于注解详解及实例代码 1.启用spring对@AspectJ注解的支持: <beans xmlns:aop="http://www.springframework.org/schema/aop"...> <!--启动支持--> <aop:aspectj-autoproxy /> </beans> 也可以配置AnnotationAwareAspectJAutoProxyCreator Bean来启动Spring对@

  • PHP用正则匹配form表单中所有元素的类型和属性值实例代码

    前言 最近工作中遇到一个需求,需要在正则匹配页面中,所有可能存在的 form 表单的元素,可能有 input,action,select,textarea等等所有可能的元素,本文给出一个代码示例.感兴趣的朋友们可以参考学习. 实例代码如下 假设页面 1.html 的网页源代码是: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>一个含有 form 表单

  • python 打印出所有的对象/模块的属性(实例代码)

    实例如下: import sys def print_all(module_): modulelist = dir(module_) length = len(modulelist) for i in range(0,length,1): print getattr(module_,modulelist[i]) print_all(sys) 以上这篇python 打印出所有的对象/模块的属性(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐