- 浏览: 358208 次
文章分类
最新评论
-
string2020:
select * from tab where user_id ...
(转)JPA JPQL -
hety163:
Java 位运算符 -
hiberatejss:
lz,~这个位运算的作用和反码是一样的吗?
Java 位运算符 -
skcmm:
博主,有个问题想请教下。我在/etc/hosts声明一个域名, ...
nginx泛域名解析 -
kid_ren:
写的好
Java 位运算符
使用注解元数据
基本注解:
例子:
@Entity(name = "T_TOPIC") ①
public
class Topic implements Serializable ...{
@Id ② -1
@GeneratedValue(strategy
= GenerationType.TABLE) ② -2
@Column(name = "TOPIC_ID") ② -3
private
int topicId;
@Column(name = "TOPIC_TITLE", length = 100) ③
private
String topicTitle;
@Column(name = "TOPIC_TIME")
@Temporal(TemporalType.DATE) ④
private Date topicTime;
@Column(name
= "TOPIC_VIEWS")
private int topicViews;
...
}
解释:
① Entity 标明该类 (Topic) 为一个实体类,它对应数据库中的表表名是
T_TOPIC ,这里也可以写成: @Entity
@Table(name = "T_TOPIC")
其作用都是一样的
② -1 Id 标明该属性对应数据表中的主键
② -2 GeneratedValue 通过 strategy
属性指明主键生成策略,默认情况下, JPA 自动选择一个最适合底层数据库的主键生成策略。在
javax.persistence.GenerationType 中定义了以下几种可供选择的策略:
1) IDENTITY
:表自增键字段, Oracle 不支持这种方式;
2) AUTO : JPA 自动选择合适的策略,是默认选项;
3)
SEQUENCE :通过序列产生主键,通过 @SequenceGenerator 注解指定序列名, MySql 不支持这种方式;
4)
TABLE :通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
② -3 Column
标明这个属性是数据表中的一列,该列的名字是 TOPIC_ID
③ Column 的一个属性 length
指明的是该属性的允许的长度。 ( 个人认为设定该属性只是对于程序中操作该属性时增加了一验证过程,对数据库中该列原来的设置并没有影响,但是
length 属性指定的值必须不能大于数据库创建表时给该列限制的最大长度否则会出错 )
④
Temporal(TemporalType.DATE) :如果属性是时间类型,因为数据表对时间类型有更严格的划分,所以必须指定具体时间类型。在
javax.persistence.TemporalType 枚举中定义了 3 种时间类型:
1) DATE :等于
java.sql.Date
2) TIME :等于 java.sql.Time
3) TIMESTAMP :等于
java.sql.Timestamp
继承关系注解:
对继承关系进行注解,必须在 父类
中声明继承实体的映射策略。
例子:
@Entity(name = "T_TOPIC")
@Inheritance(strategy
= InheritanceType.SINGLE_TABLE) ① @DiscriminatorColumn(name =
"TOPIC_TYPE", discriminatorType =
DiscriminatorType.INTEGER,
length = 1) ②
@DiscriminatorValue(value="1") ③
public class
Topic implements Serializable ...{ … }
解释:
①
Inheritance 通过 strategy 属性指明实体的继承策略。
在
javax.persistence.InheritanceType 定义了 3 种映射策略:
1) SINGLE_TABLE
:父子类都保存到同一个表中,通过字段值进行区分。
2) JOINED
:父子类相同的部分保存在同一个表中,不同的部分分开存放,通过表连接获取完整数据;
3) TABLE_PER_CLASS
:每一个类对应自己的表,一般不推荐采用这种方式。
② DiscriminatorColumn
如果继承策略采用第一种继承策略,则需要指明区分父子类的字段, DiscriminatorColumn 就是用来指明区分字段的注解。
③
DiscriminatorValue 同样的采用第一种继承策略通过字段区分父子类,则用这个注解给该实体的区分字段赋值在这里赋的值为 ”1”.
关联关系注解:
例子:
@Entity @DiscriminatorValue(value="2") ①
public
class PollTopic extends Topic ...{ ②继承于 Topic 实体
private boolean
multiple; ③
@Column(name = "MAX_CHOICES")
private int
maxChoices; @OneToMany(mappedBy="pollTopic",cascade=CascadeType.ALL) ④
private
Set options = new HashSet();
// 省略 get/setter 方法
}
解
释 :
① 通过 @DiscriminatorValue 将区分字段 TOPIC_TYPE 的值为 2 。由于
PollTopic 实体继承于 Topic 实体,其它的元数据信息直接从 Topic 获得。
④ OneToMany
指定了一个一对多的关联关系, mappedBy 属性指定 “Many” 方类引用 “One” 方类 的属性名; cascade
属性指明了级联方式(如果这里不指定为 CascadeType.ALL 的话,那么有关联关系的两个对象在做保存和删除操作时要分别来进行) 建议
:尽可能使用 cascade=CascadeType.ALL 来减少持久化操作的复杂性和代码量
注意 : JPA
规范规定任何属性都默认映射到表中,所以虽然我们没有给③处的 multiple 属性提供注解信息,但 JPA 将按照
默认的规则对该字段进行映射:字段名和属性名相同,类型相同。如果我们不希望将某个属性持久化到数据表中,则可以通过 @Transient
注解显式指定:
@Transient
private boolean tempProp1;
@Entity(name="T_POLL_OPTION")
Public class PollOption
implements Serializable ...{
@Id
@GeneratedValue(strategy
= GenerationType.TABLE)
@Column(name = "OPTION_ID")
private
int optionId;
@Column(name = "OPTION_ITEM")
private
String optionItem;
@ManyToOne ①
@JoinColumn(name="TOPIC_ID",
nullable=false) ②
private PollTopic pollTopic;
}
解
释:
① ManyToOne 描述了多对一的关联关系,他是对该类引用的 ”One” 类 (PollTopic) 的属性(
pollTopic )进行注解的。
② JoinColumn 指定关联 ”One”(PollTopic) 实体所对应表的 “ 外键 ” 。
Lob 字段的注解:
在 JPA 中 Lob 类型类型的持久化很简单,仅需要通过特殊的 Lob
注解就可以达到目的。
例子:
@Lob ① -1
@Basic(fetch =
FetchType.EAGER) ① -2
@Column(name = "POST_TEXT",
columnDefinition = "LONGTEXT NOT NULL") ① -3
private String
postText;
@Lob
@Basic(fetch = FetchType. LAZY)
② -2
@Column(name = "POST_ATTACH", columnDefinition = "BLOB") ②
-3
private byte[] postAttach;
解释:
① -1
JPA 通过 @Lob 将属性标注为 Lob 类型 ;
① -2 通过 @Basic 指定 Lob 类型数据的获取策略,
FetchType.EAGER 表示非延迟 加载,而 FetchType. LAZY 表示延迟加载 ;
① -3 通过 @Column 的
columnDefinition 属性指定数据表对应的 Lob 字段类型。
使
用 XML 元数据
除了使用注解提供元数据信息外, JPA 也允许我们通过 XML 提供元数据信息。按照 JPA
的规范, 如果你提供了 XML 元数据描述信息,它将覆盖实体类中的注解元数据信息 。 XML 元数据信息以 orm.xml 命名,放置在类路径的
META-INF 目录下。
<?xml version="1.0"
encoding="UTF-8"?>
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
①实体对象所在的包
<package>com.baobaotao.domain</package>
<entity class="Topic">
② Topic 实体配置
<table
name="T_TOPIC" />
<attributes>
<id
name="topicId">
<column name="TOPIC_ID"/>
<generated-value
strategy="TABLE" />
</id>
<basic
name="topicTitle">
<column name="TOPIC_TITLE" length="30"
/>
</basic>
<basic name="topicTime">
<column
name="TOPIC_TIME" />
<temporal>DATE</temporal>
</basic>
<basic name="topicViews">
<column
name="TOPIC_VIEWS" />
</basic>
</attributes>
</entity>
<entity class="PollTopic">
②
PollTopic 实体配置
<discriminator-value>2</discriminator-value>
<attributes>
<basic name="maxChoices">
<column
name="MAX_CHOICES" />
</basic>
<one-to-many
name="options" mapped-by="pollTopic">
<cascade>
<cascade-all/>
</cascade>
</one-to-many>
</attributes>
</entity>
<entity class="PollOption">
②
PollOption 实体配置
<table name="T_POLL_OPTION" />
<attributes>
<id name="optionId">
<column name="OPTION_ID"
/>
<generated-value strategy="TABLE" />
</id>
<basic name="optionItem">
<column
name="OPTION_ITEM"/>
</basic>
<many-to-one
name="pollTopic" >
<join-column name="TOPIC_ID"
nullable="false"/>
</many-to-one>
</attributes>
</entity>
<entity class="Post">
②
Post 实体配置
<table name="T_POST" />
<attributes>
<id name="postId">
<column name="POST_ID"
/>
<generated-value strategy="TABLE" />
</id>
<basic name="postText" fetch="EAGER">
<column
name="POST_TEXT" column-definition="LONGTEXT NOT NULL"/>
<lob/>
</basic>
<basic name="postAttach"
fetch="LAZY">
<column name="POST_ATTACH"
column-definition="BLOB"/>
<lob/>
</basic>
</attributes>
</entity>
</entity-mappings>
使用这个 orm.xml
来描述实体信息的话,这里并没有标明两个继承类之间的关系,其继承信息将从实体类反射信息获取。
到这里我们的实体描述结束
了,当然我们只是做了比较简单的描述,对于那些复杂的信息描述并没有进行讲述。实体描述结束了,有人会问如果我要来操作这些实体该怎么操作?这就是我们接
下来要讲述的问题。
EntityManager 介绍
实体对象由实体管理器进行管理, JPA
使用 javax.persistence.EntityManager
代表实体管理器。实体管理器和持久化上下文关联,持久化上下文是一系列实体的管理环境,我们通过 EntityManager 和持久化上下文进
发表评论
-
转:如何编写UML用例图
2011-04-08 17:01 1918UML用例图是非常有用 ... -
apache配置最大用户数的比较
2011-01-06 15:59 0Apache性能比较测试 8.15 Apache在配置 ... -
(转)JPA JPQL
2010-05-16 23:04 16731JPQL就是一种查询语言,具有与 SQL 相 类似的特 ... -
JQUERY复选框CHECKBOX全选,取消全选
2010-05-11 14:37 1418$("#checkall").click( ... -
XML String和Document的相互转换
2010-05-07 23:29 0在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不 ... -
get the number of online by Play
2010-04-28 14:10 1088It's not an easy problem to sol ... -
play!存在的Cookie设置的bug
2010-04-13 14:24 5543目前playframework使用的Mina在设置Co ... -
(转)Groovy的5种特殊运算符(可直接用于Play!的模板中)
2010-04-09 12:03 2907Spread Operator(展开运算符) 一个集合使 ... -
playframework的Eclipse插件问题
2010-04-08 17:19 3038在使用playclipse 插件的时候,Eclipse的版本 ... -
nginx泛域名解析
2010-04-05 22:11 5188在dns做一条泛指到主机上,利用nginx做二级域名的rewi ... -
使用play!完成iframe无刷新上传文件
2010-03-25 16:32 2226页面代码片段: <form id="uplo ... -
IE与Firefox兼顾加入收藏
2010-03-23 13:39 1223<script type="text/java ... -
submit和button提交表单的区别
2010-03-23 13:31 19317(1) 下边的写法使得表单frm能够自动提交 :下边的这个f ... -
playframework的Eclipse插件playclipse
2010-03-16 23:00 1427http://github.com/erwan/playcli ... -
playframework的JPA中对id的处理
2010-03-10 16:35 1913package play.db.jpa; import ja ... -
常用 JPA annotation 参考
2010-03-10 16:18 1781Table Table用来定义entity主表的name,ca ... -
(转)Java虚拟机(JVM)参数配置说明
2010-03-05 10:51 1064Java虚拟机(JVM)参数配置说明 在Java、J2EE ... -
获取msn联系人
2009-07-16 14:22 0网上也有不少例子,但是有些朋友遇到所谓911错误导致无法登录, ... -
将wml转换成html的方法
2009-07-10 17:21 0Opera是直接支持wml的,但是有不少bug。 Firef ... -
unicode详解
2009-05-07 17:31 1610引自:http://baike.baidu.com/view/ ...
相关推荐
hibernate基于jpa注解说明[参考].pdf
JPA注解 详解 1、@Entity(name="EntityName") 必须,name为可选,对应数据库中一的个表 2、@Table(name="",catalog="",schema="") 可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表...
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。...这个文档是针对JPA常用注解的一些说明。
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。...这个文档是针对JPA常用注解的一些说明。
JPA 的最详细的说明,为你解答每一个注解的使用方法和技巧,帮您快速梳理思路,这是多少个字了????
JPA (注解标签)参考 相当于帮助文档!
2.po中的items使用jpa注解。 3.运行测试程序itemtest中的save方法就可以自动创建items表并添加测试数据。 4.ItemsService是Items的相关操作接口,ItemsServerImpl是接口实现,注意jpa注解。 5.ItermController是...
jpa 基础 常用 标注 注解,一些常用注解 的说明,更好的jpa入门。
我的应用实例 博文链接:https://zmx.iteye.com/blog/486021
注解分为两个部分,分别是逻辑映射注解和物理映射注解, 通过逻辑映射注解可以描述对象模型,类之间的关系等等, 而物理映射注解则描述了物理的schema,表,列,索引等等. 下面我们在代码中将混合使用这两种类型的注解
JPA(java persistence api)是JavaEE5.0平台的标准的ORM规范。而Hibernate、TopLink和OpenJPA为JPA的一种实现方式。 本文档主要是对其注解的详细说明。
JPA2映射的神秘之旅,介绍JPA的标准规范以及注解声明的使用,对已如何做一对多,多对一有详细的说明!
* @content ejb3注解的API定义在javax.persistence.*包里面。 * * 注释说明: * @Entity —— 将一个类声明为一个实体bean(即一个持久化POJO类) * @Id —— 注解声明了该实体bean的标识属性(对应表中的主键)。 * ...
里面包含了JDBC,Data JPA,Data Redis,Data Mongodb,Data Rabbit,Data ElasticSearch等等。合集中的每一项都是针对不同数据存储做的简化封装,使我们在操作不同数据库时,以最简洁的代码完成需求功能。 Spring...
如果使用Java,可以利用这些类,用JSON序列化库反序列化后,再配合支持JPA注解的ORM框架(例如Hibernate)持久化到数据库。 为了和JSON数据的格式一致,关联字段只声明了关联实体的主键属性,并没有写成嵌套实体类的...
Spring MVC全注解实战开发大型商业ERP项目 是java web 开发学习的较好参照,本源码说明共八部分,为持续更新中。本次为第二部分。
Spring MVC全注解实战开发大型商业ERP项目 是java web 开发学习的较好参照,本源码说明共八部分,为持续更新中。本次为第一部分。
本版本全面更新了jar包,全部使用了当前最新版本的jar包,struct2.1.8 spring3 hibernate3.5,全面使用注解取代xm的l配置。 另外增加了一个ant构建脚本,支持使用hudson完成每日构建,持续集成,自动测试,代码规范...
用三个注解配合Aspect使用 #### IsOwner 标识参数中的UserId是否与当前登录用户一致 #### NeedAdmin 是否需要管理员权限,管理员的type为1,普通用户为0 #### PreAuthorize SpEL表达式,可以自定义自己的权限...
于是一怒之下,自己动手丰衣足食,于是就自己用Swing写了一个基于数据库的自动化生成工具,支持MySQL、Oracle、SQLServce、PostgreSQL四种数据库,支持Window、Linux、MacBook等多个作系统,完美支持JPA注解,可以...