当前位置:文档之家› JPA-对应关系-注解配置

JPA-对应关系-注解配置

JPA-对应关系-注解配置
JPA-对应关系-注解配置

JPA:

一对多关系:

●在一的一方实体bean中添加多的一方的集合。

●在get方法上使用注解:@OneToMany

@OneToMany(cascade={CascadeType.REFRESH,CascadeType.REM OVE},fetch=https://www.doczj.com/doc/a07494201.html,ZY,mappedBy="parent")

◆Cascde:级联操作类型,有REFRESH刷新REMOVE 删除MERGE

更新PERSIST 保存。只有在EnitityManger中使用了对应的方法,才

会调用相应的级联操作。

◆Fetch:加载类型,LAZY 懒加载和EAGER 立即,如果后一个单词是

Many,默认的就是LAZY,如果是One,则是EAGER。

◆MappedBy:如果出现这个属性,则是关系被维护端,它指定由Many

的哪个属性来维护。

多对一关系:

●在多的一方实体bean中添加一的一方.

●在其get方法上使用注解: @ManyToOne

@ManyToOne(cascade={CascadeType.REFRESH},optional=true,fet ch=FetchType.EAGER)

◆Cascde:级联操作类型,有REFRESH刷新REMOVE 删除MERGE

更新PERSIST 保存。只有在EnitityManger中使用了对应的方法,才

会调用相应的级联操作.

◆Fetch:加载类型,LAZY 懒加载和EAGER 立即,如果后一个单词是

Many,默认的就是LAZY,如果是One,则是EAGER

◆Optional:一的一方是否可选.true---可选的,false----必须存在的.

@JoinColumn:在多对一的一方指定关联列(外键)的属性------名字

实体bean的映射:

●@Entity:在bean的最上面使用,使实体bean映射到数据库中

●@Table(name=””):指定实体bean映射到数据库中的表名.

●@Id @GeneratedValue(strategy=GenerationType.AUTO)

?Id:指定实体bean在数据库表的实体标识属性

?Strategy:id的生成策略.

?GenerationType.AUTO:自动(默认值,可以不设定)

?GenerationType.IDENTITY:数据库的id自增长(Oracle不支持)

?GenerationType. SEQUENCE:序列化(Mysql不支持)

?GenerationType.TABLE:表生成

●@Column(length=20,nullable=false,name=””) :字段属性注释

?Length:指定字段的长度

?Nullable:是否为空.false:不为空true:空

?Name:指定字段映射到表的列名

●@Temporal(TemporalType.DATE):指定类型为时间的字段属性的映射

?DATE:日期,不包括时间.1985-09-09

?TIME:时间,没有日期.23:44:00

?TIMESTAMP:时间戳,包括日期和时间1985-09-09 23:44:00

●@Enumerated(EnumType.STRING):枚举类型属性的映射

?EnumType.STRING:保存枚举类型数据的字符类型数据到数据库

?EnumType. ORDINAL:保存枚举类型数据的索引值到数据库

●@Lob:大文本字段(String)和二进制数组类型字段(Byte[])使用它,对应数据

库的大文本类型.

●@Transient : 属性不跟数据库表进行映射使用Transient注解

●@Basic(fetch=https://www.doczj.com/doc/a07494201.html,ZY): 延时加载数据使用Basic注解中的

FatchType

?LAZY 懒加载

?EAGER 立即

JPA中的增、删、改、查:

?增:persist(Object obj):保存

?查:1.find(Object.class,id):查找(立即查询)

2.getReference(Object.class,id):查找.(懒加载),返回Object的代理对

象。要在EntityManager关闭前去访问

?改:对象处于托管状态时,只需要调用对象的setter方法,在事务提交时自动

同步到数据库中. 对象处于游离状态时,则使用merge方法将数据同步到数据库中.

?删:remove(Object obj)

JPA中实体的状态(四种):

//1 new 新建状态(瞬时状态)

//2 manager 托管状态(持久化状态)

//3 游离状态(脱管状态)EntityManager.clear:使实体对

象从托管状态变成游离状态

//4 删除状态

spring4.x + hibernate4.x 配置详解

spring4.x + hibernate4.x 配置详解 关于spring和hibernate的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜索一下即可。 本篇博文的内容主要是我最近整理的关于spring4.x 和hibernate 4.x 相关配置和使用方式,当然spring3.x以及hibernate4.x也可以借鉴。 首先是配置文件web.xml 增加以下代码即可 contextConfigLocation classpath*:/applicationContext.xml org.springframework.web.context.ContextLoaderListener 然后建立 applicationContext.xml 文件,src下。文件内容如下,注释我尽量写的很详细 org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql:///hibernatedemo root yzp140103 这样就配置好了。 接下来,要做的就是做开发测试了:在项目的src目录下新建一个实体类包com.joe.entity,在该包下新建一个实体类Student,代码如下: package com.joe.entity; import java.io.Serializable;

springmvc框架搭建之xml配置说明(spring4+hibernate4)

SpringMVC框架搭建说明 Spring4.1.4 + hibernate4.3.8 1、web.xml配置 程序运行时从web.xml开始,加载顺序为:context-param -> listener -> filter ->structs (如果使用structs的话)-> servlet 如下为web.xml的配置说明 bmymis2 contextConfigLocation classpath:applicationContext-*.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true springServlet org.springframework.web.servlet.DispatcherServlet

马士兵hibernate文档 (个人完善版)

3. hibernate.hbm2ddl.auto : 在SessionFactory 创建时,自动检查数据库结构,或者将数据库schema 的DDL 导出到数据库。使用create-drop 时,在显式关闭SessionFactory 时,将删除掉数据库schema。 例如:validate | update | create | create-drop create :如果没有表就创建 update :如果表结构更新,就更新 validate :每次插入表的时候看看表结构有没有更新。 理论上是先建类后建表:这个时候只要你的类建好了,可以跨数据库。 实际中先建表比先建类多,建好表以后要对数据库进行优化,比如建索引,建试图,各种各样的优化。 project\etc目录下面有很多示例性的文档,log4j的文档就在那个下面。 SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); SessionFactory的建立是很耗费时间的,应该像连接池一样,只建立一次,以后要用就直接从那用。 Hibernate文档建议我们自己写一个辅助类,用单例来做。 JUnit的一个bug: @BeforeClass public static void beforeClass() { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } 在这句话的时候 配置文件如果有的时候写错了,她悄悄把错误隐藏起来了。 解决的方法:可以对这句话加try catch块 8.表名和类名不一致的时候: @Entity @Table(name="_teacher")

Struts+Spring+Hibernate框架搭建

整合SSH框架 整合框架版本:hibernate-distribution-3.6.0.Final-dist + spring-framework-2.5.6.SEC01-with-dependencies + struts-2.1.8.1 一、搭建工具 Windows 、Tomcat 6.0+ 、MyEclipse、SQLServer2008 R2 、Google 二、创建工程 新建WEB项目工程(MyEclipse),包含web.xml配置文件。 三、添加框架环境Junit4 右击新建的项目,选择Build Path —> Add Library —> Junit —> 选择Junit4 —> 确定完成单元测试的添加。 四、添加框架环境Struts2 1.解压struts- 2.1.8.1 ,如下图所示: 可在apps文件里,随机选择一个.war文件解压,到WEB-INF→lib下的基础jar文件:

复制黏贴添加到项目工程的lib下。也可将lib下的全部jar(71个)都复制到项目中来,不过很多用不到。我们崇尚即用即加的原则…… 2. 配置struts.xml和web.xml文件,如下: web.xml: ItcastOA struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndE xecuteFilter struts2 /* index.html index.htm index.jsp default.html default.htm default.jsp struts.xml:

hibernate_annotation

Hibernate Annotation 使用hibernate Annotation来映射实体 准备工作 下载 hibernate-distribution-3.3.2.GA hibernate-annotations-3.4.0.GA slf4j 导入相关依赖包 Hibernate HOME: \hibernate3.jar \lib\bytecode(二进制) \lib\optional(可选的) \lib\required(必须的) 导入required下的所有jar包 antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar log4j-1.2.14.jar mysql.jar ---Annotation包 ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar

简单的例子,通过annotation注解来映射实体PO 1、建立(Java Project)项目:hibernate_0100_annotation_HelloWorld_default 2、在项目根下建立lib目录 a)导入相关依赖jar包 antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar ejb3-persistence.jar hibernate-annotations.jar hibernate-commons-annotations.jar hibernate3.jar javassist-3.9.0.GA.jar jta-1.1.jar log4j-1.2.14.jar mysql.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar 3、建立PO持久化类cn.serup.model.Teacher 内容如下 package cn.serup.model; import javax.persistence.Entity; import javax.persistence.Id; //@Entity表示该是实体类 @Entity public class Teacher { private int id ; private String username ; private String password ; //ID为主键,主键手动分配 @Id public int getId() { return id; } public void setId(int id) { this.id = id;

hibernate关联注解

说明: 本文对hibernate的一对多、多对一、多对多的关联 示例代码是Order类和OrderItem类的一对多的关系 1.一对多 1.1注解方式: @OneToMany 代码示例如下: 双向关联,维护端在“多”的一端 Public class Order implements Serializable { Private Set orderItems = new HashSet(); @OneToMany(mappedBy="order"(有了mappedby不能也不该在此再定义@joincolumn),cascade = CascadeType.ALL, fetch = https://www.doczj.com/doc/a07494201.html,ZY) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 单向关联,维护端在此端 Public class Order implements Serializable { private Set orderItems = new HashSet(); @OneToMany(cascade = CascadeType.ALL, fetch = https://www.doczj.com/doc/a07494201.html,ZY) @JoinColumn(name=”order_id”) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 1.2维护端和级联问题 维护端的意思是对外键进行维护,维护端有对外键进行插入和更新的权利。 下面分情况介绍hibernate的级联操作: 1.2.1单向关联 对“一”表进行插入一条记录的操作: 1)级联类型:CascadeType.ALL 执行语句: 1.insert into category (description, name, id) values(?, ?, ?)

hibernate关系映射注解配置

1. Hibernate Annotation关系映射有下面几种类型: 1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要,有需要看下文档即可) 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。 因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了 4)多对一关联映射(单向) 5)一对多关联映射(单向) 6)一对多关联映射(双向) 7)多对多关联映射(单向) 8)多对多关联映射(双向) 2.介绍各种映射用法 1)一对一外键关联映射(单向)Husband ---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} … } public class Wife{ } 一对一外键关联,使用@OneToOne,并设置了级联操作 @JoinColum设置了外键的名称为wife_id(数据库字段名),如果不设置,则默认为另一类的属性名+ _id 外键的值是唯一的(unique),不可重复,与另一类的主键一致 2)一对一外键关联映射(双向)Husband <---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} ... } public class Wife{ private Husband husband; @OneToOne(mappedBy="wife",cascade=CascadeType.ALL) public Husband getHusband(){…} ... } 一对一双向关联关系,使用@OneToOne 注意:需要加上mappedBy="wife",如果不加上的话,Wife也会生成一个外键(husband_id)。mappedby="wife"需要指向与他关联对象的一个属性(即Husband类里面的wife属性),这里的会在Husband表里面生成个外键wife_id字段,而Wife表里则不会生成。这里Husband作为维护端即主

Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解

在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过一个实例,详细的为大家讲解如何实现全注解式的开发。 开发环境 JDK1.6.0_18 Eclipse3.2.1 MyEclipse5.1.0 Tomcat6.0.10 MySQL5.0.27 Navicat Lite for MySQL8.1.20 每个人的开发环境可能会有差异,但有一点我需要说明的是,JDK的版本不得低于1.5,因为用到了很多1.5版才支持的新特性。Tomcat和MySQL请不要低于我所用的版本,因为我没在其它的版本上进行测试。Navicat则是MySQL数据库的图形化操作工具。我在这里假定各位目前已经设置好了开发环境,下面就开始详细的说明。 由于要阐述的内容比较多,大象决定将它们划分成个几章节来讲,这一章就主要来说说jar包的选择。 第一部分:选择必须的jar包 新建一个web项目,然后将必要的jar包COPY到lib里面。根据本文实例demo,大象给出下图中的最少jar包配置。 我对这些jar包进行一下说明,方便大家理解。

解压Struts2.1.6的lib文件夹,从中选出上面7个jar包添加到我们的工程库中。commons-logging、freemarker、ognl、struts2-core、xwork这5个还是struts2的核心包。但在Struts2.1.6这个版本中,还需要加上commons-fileupload包。如果没有,则启动就会报错,不过不需要像网上传言的那样还得加上commons-io的jar包,这些大象都亲自做过测试。在本实例中,我将对struts2也采取注解的方式,所以用到了struts2-convention-plugin-2.1.6.jar这个插件。因为要与spring整合,所以struts2-spring-plugin-2.1.6.jar也必不可少。 大象在这里偷个懒,直接将spring的完整jar包加了进来,如果各位想精简类库的话,就选取它的分类jar包吧。比如本例使用struts2作为MVC框架,所以spring的webmvc就不可能用到了。有想改的朋友请自己动手改下。另外有点我想说下,如果采取完整spring的jar包,还需要Spring2.5.6\lib\concurrent文件夹中的backport-util-concurrent.jar,如果不加这个,spring会报错。但是采取spring分类jar包的形式,这个可以不用加,至于具体使用什么需要依赖这个包,大象还没去测试过,这个有待验证。还有lib\slf4j下的日志包,目前很多都开始采用基于slf4j 接口的日志器,它的好处就是日志器是根据slf4j的接口来进行实现,可以在不改变代码的情况下更换日志器。最后Spring的源代码中使用的是commons-logging记录日志,因此这个包不能少,不过因为struts2也用到了,所以这里就省了。 Hibernate从3.3版开始,对jar包结构做了一次大的调整,我们只需要加入lib\required文件夹下面的6个jar包。请注意这6个jar包都是使用Hibernate所必须的。另外再加上hibernate 核心包。这里我将slf4j-api-1.5.2.jar换成了1.5.0,这是因为slf4j是一个通用日志接口,不提供任何实现,我在demo里面使用的是log4j,而hibernate包里面没有log4j的slf4j实现。而且如果版本不一致,会有异常,因此我就采用Spring2.5.6\lib\slf4j里面提供的配套版本。另外我将commons-collections-3.1.jar换成了Struts2.1.6里面的3.2版。

Hibernate注解

Hibernate注解 常用的hibernate annotation标签如下: @Entity --注释声明该类为持久类。 @Table(name="promotion_info") --持久性映射的表(表名="promotion_info)。 @Column(name=”DESC”,nullable=false,length=512) --用于指定持久属性或字段的映射列。 @Id --注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。 @GeneratedValue --定义自动增长的主键的生成策略。 @Transient --将忽略这些字段和属性,不用持久化到数据库。 @Temporal(TemporalType.TIMESTAMP) --声明时间格式。 @Enumerated --声明枚举 @Version --声明添加对乐观锁定的支持 @OneToOne --可以建立实体bean之间的一对一的关联 @OneToMany --可以建立实体bean之间的一对多的关联 @ManyToOne --可以建立实体bean之间的多对一的关联 @ManyToMany --可以建立实体bean之间的多对多的关联 @Formula --一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等) @OrderBy --Many端某个字段排序(List) 下面是对以上常用Hibernate注解标签的详细介绍与举例: @Entity --注释声明该类为持久类。将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的, 要用下面的Transient来注解. @Table(name="promotion_info") --持久性映射的表(表名="promotion_info).@T able是类一级的注解,定义在@Entity下,

Hibernate实现(注解方式)

Hibernate实现(注解方式) 注解方式: 注解的方式与xml很很多类似: 首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jar ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar 下面是不同的地方: (1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类: 即把: 改为: (2):获取SessionFactory方式发生了变化: 即:由SessionFactory sf = new Configuration().configure().buildSessionFactory() 改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory() (3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。 注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。 (2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。 (3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。 (4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射)) (5):表名称可以在实体类前进行注解。 (6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。 --------------------------------------------------------------------------------------------------------------------- @Entity // 表示为实体类 @Table(name="t_teacher") // 表名注解 publicclass Teacher implements Serializable { privateint id; private String username; privateint age; @Id// 表示主键 @GenericGenerator(name = "generator", strategy = "increment") @GeneratedValue(generator = "generator") // 自增长@Column(name = "id") // 类属性对应着表字段 publicint getId() { return id; } public void setId(int id) { this.id = id; }

ssh(struts2.2.1+ hibernate3.6+spring3.0.5)整合配置

手工搭建最新版本的SSH(struts2.2.1+ hibernate3.6+spring3.0.5)组合 一、为SSH做好准备 1.struts2- 2.2.1-all.zip 2.hibernate-distribution- 3.6.0.Final-dist.zip 3.spring-framework-3.0.5.RELEASE.zip 4.spring-framework-2. 5.6-with-dependencies.zip 5.slf4j-1. 6.1.zip apache-tomcat-6.0.29.zip mysql-connector-java-5.1.13-bin.jar mysql-essential-5.1.53-win32.msi 工具用eclipse或者myeclipse 文件都行 二、搭建开发环境打开MyEclipse,新建一个web project (选择Java EE5.0)

三、需要的jar包 1、hibernate-3.6.0 配置 Java代码 hibernate-distribution-3.6.0.Final-dist.zip中需要如下jar hibernate3.jar lib/required/antlr-2.7.6.jar lib/required/commons-collections-3.1.jar lib/required/dom4j-1.6.1.jar lib/required/javassist-3.12.0.GA.jar lib/required/jta-1.1.jar lib/required/slf4j-api-1.6.1.jar lib/jpa/hibernate-jpa-2.0-api-1.0.0.Final.jar //新版本需要 jar slf4j-1.6.1.zip中需要如下jar slf4j-nop-1.6.1.jar mysql-connector-java-5.1.13-bin.jar //mysql 的驱动包 注意:新版本已经和Annotation做了组合要用Annotation不需要另外加入jar。 在测试的时候也不需要第一种写法: Java代码 1.SessionFactory sf = new AnnotationConfiguration().configure().b uildSessionFactory(); //现在已经过时

hibernate映射关系学习笔记

对象关联关系 一对一 单向:一方引用,在引用方加入被引用对象字段,注解@OneToOne 默认引用外键字段名为“被引用类名_id”,使用@JoinColumn(name=”your_name”)更改外键字段名 联合主键: @JoinColumns({ @JoinColumn(name="add_id",referencedColumnName="id"), @JoinColumn(name="add_code",referencedColumnName="areaCode") }) 双向:双方各自引用,都加入对方的引用,注解@OneToOne,表之间各自外键引用,不符合设计要求,通常一方引用,所以在被引用方法注解: @OneToOne(MappedBy=”引用方字段名”)。双向一般都设MappedBy 组件映射:一对一关系通常处理为在同一张表中存储数据,若程序端需要拆分成多个实体,使用组件映射方式@Embeded(在包含实体中注解) 若需要属性重写(改列名): @AttributeOverrides({ @AttributeOverride(name="fname",column=@Column(name="firstname")), @AttributeOverride(name="lname",column=@Column(name="lastname")) }) 多对一和一对多 多对一单向:在多方有一方的引用,注解@ManyToOne 一对多单向:在一的一方存在多方的集合(set),在一方注解@OneToMany 注意,Hibernate将一对多处理为多对多的特例,默认为两个关系表建中间表关联,所以加@JoinColumn 双向:多方注解@ManyToOne,一方注解@OneToMany(mappedBy="st")(st为多方引用一方对象名),注意一方不需再注解@JoinColumn 多对多 单向:在其中一方引用另外一方,类型为集合(set),注解@ManyToMany,若要改变中间表的表名及列名, 注解@JoinTable(name,joinColumns={@JoinColumn(name=”table1_id”)}, reverseJoinColumns={@JoinColumn(name=””)}) 双向:

hibernate注解

环境: Hibernate 3.3.1 Maven 3.0.4 MySQL 5.5.13 Myeclipse 8.6.1 建表语句: DROP TABLE IF EXISTS `t_company`; CREATE TABLE `t_company` ( `companyId` int(10) unsigned NOT NULL AUTO_INCREMENT, `companyName` varchar(30) NOT NULL, PRIMARY KEY (`companyId`) ) ENGINE=InnoDB AUTO_INCREMENT=3DEFAULT CHARSET=gb2312; INSERT INTO `t_company` VALUES ('1', 'Sun'); INSERT INTO `t_company` VALUES ('2', 'Apache');

DROP TABLE IF EXISTS `t_employee`; CREATE TABLE `t_employee` ( `employeeId` int(10) unsigned NOT NULL AUTO_INCREMENT, `employeeName` varchar(15) NOT NULL, `cid` int(10) unsigned NOT NULL, PRIMARY KEY (`employeeId`) ) ENGINE=InnoDB AUTO_INCREMENT=6DEFAULT CHARSET=gb2312; INSERT INTO `t_employee` VALUES ('1', 'Tom', '1'); INSERT INTO `t_employee` VALUES ('2', 'Summ', '1'); INSERT INTO `t_employee` VALUES ('3', 'Cat', '2'); INSERT INTO `t_employee` VALUES ('4', 'Vinylon', '1'); INSERT INTO `t_employee` VALUES ('5', 'Dog', '2'); 目录结构:

hibernate注解详解

Table用来定义entity主表的name,catalog,schema等属性。 属性说明: ?name:表名 ?catalog:对应关系数据库中的catalog ?schema:对应关系数据库中的schema ?UniqueConstraints:定义一个UniqueConstraint数组,指定需要建唯一约束的列 Java代码 1.@Entity 2.@Table(name="CUST") 3.public class Customer { ... } @SecondaryTable 一个entity class可以映射到多表,SecondaryTable用来定义单个从表的名字,主键名字等属性。 属性说明: ?name:表名 ?catalog:对应关系数据库中的catalog ?pkJoin:定义一个PrimaryKeyJoinColumn数组,指定从表的主键列 ?UniqueConstraints:定义一个UniqueConstraint数组,指定需要建唯一约束的列 下面的代码说明Customer类映射到两个表,主表名是CUSTOMER,从表名是CUST_DETAIL,从表的主键列和主表的主键列类型相同,列名为CUST_ID。 Java代码 1.@Entity 2.@Table(name="CUSTOMER") 3.@SecondaryTable(name="CUST_DETAIL",pkJoin=@PrimaryKeyJoinColumn(name="CUST_ID")) 4.public class Customer { ... } @SecondaryTables 当一个entity class映射到一个主表和多个从表时,用SecondaryTables来定义各个从表的属性。 属性说明: ?value:定义一个SecondaryTable数组,指定每个从表的属性。

Hibernate注解用法总结

1.类级别注解 @Entity 映射实体类 @Table 映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bean。 属性: name - 可选,对应数据库中的一个表。若表名与实体类名相同,则可以省略。 @Table(name="",catalog="",schema="") - 可选,通常和@Entity配合使用,只能标注在实体的class 定义处,表示实体对应的数据库表的信息。 属性: name - 可选,表示表的名称,默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名 catalog - 可选,表示Catalog名称,默认为Catalog(""). schema- 可选, 表示Schema 名称, 默认为Schema(""). 2.属性级别注解 @Id 映射生成主键 @Version 定义乐观锁 @Column 映射表的列 @Transient 定义暂态属性 2.1 与主键相关注解 @Id - 必须,定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键,置于getXxxx() 前。 @GeneratedV alue(strategy=GenerationType,generator="") - 可选,用于定义主键生成策略。属性: Strategy - 表示主键生成策略,取值有: GenerationType.AUTO- 根据底层数据库自动选择(默认),若数据库支持自动增 长类型,则为自动增长。 GenerationType.I NDENTITY- 根据数据库的Identity字段生成,支持DB2、MySQL、 MS、SQL Server、SyBase与HyperanoicSQL数据库的Identity 类型主键。 GenerationType.SEQUENCE -使用Sequence来决定主键的取值,适合Oracle、DB2等 支持Sequence的数据库,一般结合@SequenceGenerator使用。

相关主题
文本预览
相关文档 最新文档