- 浏览: 362298 次
文章分类
最新评论
-
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 1964UML用例图是非常有用 ... -
apache配置最大用户数的比较
2011-01-06 15:59 0Apache性能比较测试 8.15 Apache在配置 ... -
(转)JPA JPQL
2010-05-16 23:04 16805JPQL就是一种查询语言,具有与 SQL 相 类似的特 ... -
JQUERY复选框CHECKBOX全选,取消全选
2010-05-11 14:37 1467$("#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 1126It's not an easy problem to sol ... -
play!存在的Cookie设置的bug
2010-04-13 14:24 5598目前playframework使用的Mina在设置Co ... -
(转)Groovy的5种特殊运算符(可直接用于Play!的模板中)
2010-04-09 12:03 3031Spread Operator(展开运算符) 一个集合使 ... -
playframework的Eclipse插件问题
2010-04-08 17:19 3088在使用playclipse 插件的时候,Eclipse的版本 ... -
nginx泛域名解析
2010-04-05 22:11 5250在dns做一条泛指到主机上,利用nginx做二级域名的rewi ... -
使用play!完成iframe无刷新上传文件
2010-03-25 16:32 2286页面代码片段: <form id="uplo ... -
IE与Firefox兼顾加入收藏
2010-03-23 13:39 1275<script type="text/java ... -
submit和button提交表单的区别
2010-03-23 13:31 19363(1) 下边的写法使得表单frm能够自动提交 :下边的这个f ... -
playframework的Eclipse插件playclipse
2010-03-16 23:00 1473http://github.com/erwan/playcli ... -
playframework的JPA中对id的处理
2010-03-10 16:35 1958package play.db.jpa; import ja ... -
常用 JPA annotation 参考
2010-03-10 16:18 1832Table Table用来定义entity主表的name,ca ... -
(转)Java虚拟机(JVM)参数配置说明
2010-03-05 10:51 1098Java虚拟机(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 1640引自:http://baike.baidu.com/view/ ...
相关推荐
JPA通过使用注解或XML来定义对象-关系映射(ORM),简化了数据库操作。下面将详细介绍JPA中的一些核心注解及其用法。 1. **@Entity(name="EntityName")**:此注解标记一个Java类为一个实体类,它对应数据库中的一个...
本篇文章将详细解释在Hibernate中基于JPA注解的使用方法。 1. **@Entity(name="EntityName")**:这个注解用于声明一个Java类作为数据库中的实体,"EntityName"是可选的,如果不指定,那么实体的名称默认为类名。每...
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常用注解的一些说明。
Java 程序使用 JPA 注解详解 Java 持久层 API(Java Persistence API)是一种 Java 应用程序接口,用于访问、管理和持久化数据之间的关系。JPA 使用注解来定义实体类与数据库表之间的映射关系,本文将详细介绍 JPA ...
本文将详细介绍JPA中常用注解的使用方法和技巧。 @Entity:此注解用于声明一个类是实体类,并且该类中的对象会被映射到数据库表。实体类通常需要使用@Table注解来指定具体的数据库表名称。当实体类的名称和数据库表...
**JPA注解详解** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种对象/关系映射(ORM)机制,使得开发人员可以使用面向对象的编程方式来操作数据库。在JPA中,注解...
标签中提到了"JPA注解参考_Oracle",这暗示了文件可能包含有关如何在JPA中使用注解来配置实体类以及在Oracle数据库上运行的相关信息。在JPA中,注解如`@Entity`用于标记实体类,`@Table`指定对应的数据库表,`@Id`...
### JPA注解教程 #### 一、JPA与实体持久化 Java Persistence API (JPA) 是一种用于管理关系型数据库中数据的标准规范。它允许开发者以面向对象的方式操作数据库,无需直接编写SQL语句。JPA的核心是实体管理和查询...
在JPA中,注解(也称为标签)起着至关重要的作用,它们提供了声明式的方式来配置实体类,使得这些类能够被持久化到数据库中。 1. **实体**: - `@Entity`:这个注解标记一个Java类为一个JPA实体,意味着这个类的...
### JPA 使用说明 #### 一、引言与背景 在企业级应用开发中,管理关系型数据库的数据是一项核心任务。传统的做法是使用 JDBC(Java Database Connectivity)来操作数据库。虽然 JDBC 支持大量数据的处理,能确保...
要使用JPA注解,首先需要在项目中添加相应的依赖库,如`ejb3-persistence.jar`等。 #### 三、常用JPA注解详解 1. **@Entity** - 该注解用于标记一个Java类为实体类,表明它可以被JPA持久化。例如: ```java @...
我们将通过具体的例子来说明这些概念,并参考一个名为“JPA_Dome”的压缩包文件中的示例代码。 首先,我们需要引入JPA的依赖,如Spring Data JPA,它为Spring应用提供了与JPA的集成。在Maven的pom.xml文件中,你...
**JPA注解分类与说明** 1. **实体注解 (@Entity)**: - `@Entity`标记一个Java类为JPA实体,这意味着这个类的实例将被持久化到数据库中。默认情况下,实体类名对应数据库表名,字段对应列名。 2. **数据库模式属性...
以下是对"jpa/hibernate继承注解"这一主题的详细说明。 1. **单一表继承(Single Table Inheritance, STI)** 单一表继承是最简单的继承策略,所有的子类信息都存储在一个数据库表中。使用`@Inheritance(strategy ...
2.po中的items使用jpa注解。 3.运行测试程序itemtest中的save方法就可以自动创建items表并添加测试数据。 4.ItemsService是Items的相关操作接口,ItemsServerImpl是接口实现,注意jpa注解。 5.ItermController是...
### Java Persistence API (EJB 3.0 中的 JPA 规范说明) #### 引言 Java Persistence API(简称 JPA)是 Java 社区规范 JSR 220 的一部分,它定义了一种对象关系映射工具的标准,允许 Java 开发人员将 Java 应用...
以下是对 Hibernate 注解的详细说明: 1. **@Entity**:这个注解用于标记一个 Java 类为实体类,意味着这个类的实例将被持久化到数据库中。一个实体类通常代表数据库中的一个表。 2. **@Id**:这个注解标记实体类...
- **资源管理**:比如在JPA中,@Transactional注解用于标记一个方法或类,表明该方法需要在事务中执行。 - **配置**:例如Spring的@Configuration和@Bean注解,用于声明配置类和配置方法。 6. **注解的实战应用**...
3. **实体类**:编写表示数据库表的Java类,并使用JPA注解如@Entity、@Table、@Id等进行映射。 4. **持久化配置**:创建一个名为`persistence.xml`的文件,配置数据源、实体扫描路径、JPA供应商(这里是Hibernate)...