HIbernate实体类注解配置

一、类级别注解

1、@Entity(name="EntityName")

必须

name为可选,对应数据库中一的个表

2、@Table(name="",catalog="",schema="")

可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息

name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名

catalog:可选,表示Catalog名称,默认为Catalog("").

schema:可选,表示Schema名称,默认为Schema("").

二、属性级别注解

1、@id

必须,定义映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.置于getXxxx()前.

2、@GeneratedValue(strategy=GenerationType,generator="")

可选

strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种,分别表示让ORM框架自动选择,根据数据库的Identity字段自动生成(主要是自动增长类型的主键,适用于sql server,mysql,DB2,MS等数据库中,oracle不适用),根据数据库表的Sequence字段生成(oracle,DB2使用该种),使用一个特定的数据库表格来保存主键,默认为AUTO

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

示例:

@Id
@GeneratedValues(strategy=StrategyType.INDETITY)
public int getId() {
    return id;
}

3、@Basic(fetch=FetchType,optional=true)

可选,@Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认即为@Basic

fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.

optional:表示该属性是否允许为null,默认为true

示例:

@Basic(optional=false)
public String getAddress() {
    return address;
}

4、@Column

可选,@Column描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用.

name:表示数据库表中该字段的名称,默认情形属性名称一致

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

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

length:表示该字段的大小,仅对String类型的字段有效

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

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

columnDefinition:表示该字段在数据库中的实际类型.通常ORM框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR,如果要将String类型映射到特定数据库的BLOB或TEXT字段类型,该属性非常有用.

示例:

@Column(name="BIRTH",nullable="false",columnDefinition="DATE")
public String getBithday() {
    return birthday;
}

5、@Temporal

可选,用于定义映射到数据库的时间精度

@Temporal(TemporalType=DATE)       日期

@Temporal(TemporalType=TIME)       时间

@Temporal(TemporalType=TIMESTAMP) 两者兼具

6、@Transient

可选,@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.

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

示例:

//根据birth计算出age属性
@Transient
public int getAge() {
    return getYear(new Date()) - getYear(birth);
}
时间: 2024-12-24 10:24:38

HIbernate实体类注解配置的相关文章

spring+hibernate实体类注解详解(非原创) + cascade属性取值

@Entity //继承策略.另一个类继承本类,那么本类里的属性应用到另一个类中 @Inheritance(strategy = InheritanceType.JOINED ) @Table(name="INFOM_TESTRESULT") public class TestResult extends IdEntity{} 1 @Entity(name="EntityName") 必须 name为可选,对应数据库中一的个表 2 @Table(name="

Hibernate 实体类注解

Hibernate注解 1.@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2.@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息 name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 catalog:可选,表示Cat

[转]实体类注解

@Entity//继承策略.另一个类继承本类,那么本类里的属性应用到另一个类中@Inheritance(strategy = InheritanceType.JOINED ) @Table(name="INFOM_TESTRESULT")public class TestResult extends IdEntity{} 1 @Entity(name="EntityName") 必须 name为可选,对应数据库中一的个表 2 @Table(name="&q

Intellij idea生成Hibernate实体类

反向生成基于注解的Hibernate实体类 1. 为项目添加Hibernate支持 2. 在IDE右边找到database,然后按照步骤添加数据. 3. 保存后.在主面板左侧有persistence,在hibernate图标上点击右键-Generate Persistence Mapping-By Database Scheme. 4. 选好数据库,选好包的位置,在下面勾上要生成的表对应的pojo,添加到sessionFactory,并且勾上为每一个pojo生成XML即可.

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法

[转]eclipse借助hibernate tool从数据库逆向生成Hibernate实体类

如何从数据库逆向生成Hibernate实体类呢??? 1. 首先,要在eclipse中采用自带的数据库管理器(Data Management),连通你的数据库: 然后选择数据库,这里用的oracle,然后给个名字,如MyOracle. 点击下图中按钮,新建一个数据库驱动的配置. 选择数据库版本,这里是oracle 10g版本,可以为该配置另起个名字. 然后选择相应数据库版本的jar包. 下面就是依据自身情况填写数据库连接配置了. 接下来,完善Properties下的General选项卡内容,同样

MyEclipse从数据库逆向生成Hibernate实体类

这个分为二个操作:数据库操作和MyEclipse操作 关系映射有:单双向1-n.n-1.n-n. 映射关系多由数据库里的表关系决定 当然也可以只对一个表进行操作 单双向1-n.n-1由二个表 单双向n-n由三个表,其中第三个表连接另外二个表 以下是创建n-n    MyEclipse从数据库逆向生成Hibernate实体类: 数据库操作: 创建表:Person_inf address_inf person_address 其中的关系是:person_address创建外键 需要注意的是perso

【转】Eclipse从数据库逆向生成Hibernate实体类

原文地址:http://blog.csdn.net/wangpeng047/article/details/6877720 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是:

修改Hibernate实体类字段int为Integer产生java.lang.NoSuchMethodError

问题描述: 在将Hibernate实体类字段int为Integer产生java.lang.NoSuchMethodError,但是明明是有这个方法的,但是一直说没有这个方法.后经仔细对比字节码文件,发现jdk在编译字节码时,会对相关方法进行处理. 详细编译情况如下: 原始代码: net.setPushstatus(Integer.parseInt(pushstatus)); 实体类属性字段类型为int 时编译的代码: net.setPushstatus(Integer.parseInt(push