@ColumnResult
执行 @NamedNativeQuery
时,它可以返回实体(包括不同类型的实体)、标量值或实体和标量值的组合。
使用
@ColumnResult
批注返回标量值。标量类型由您在
@ColumnResult
中标识的列类型确定。
有关详细信息,另请参阅 @EntityResult
、@FieldResult
和 @SqlResultSetMapping
。
表 1-8
列出了此批注的属性。有关更多详细信息,请参阅 API
。
表 1-8 @ColumnResult
属性
属性
|
必需
|
说明
|
name
|
|
在原生 SQL
查询的
SELECT
语句中将
name
设置为列名的
String
等效形式。如果在
SELECT
中使用列别名(
AS
语句),则将
name
设置为列别名。
|
示例 1-9
显示了如何使用此批注将
Item
(请参阅示例 1-10
)标量
name
包含在结果列表(请参阅示例 1-11
)中。在该示例中,结果列表将为
Object
数组的
List
,如:
{[Order, "Shoes"],
[Order, "Socks"], ...}
。
示例 1-9
使用 @ColumnResult
的 Order
实体
@SqlResultSetMapping(
name="OrderResults",
entities={
@EntityResult(
entityClass=Order.class,
fields={
@FieldResult(name="id",
column="order_id"),
@FieldResult(name="quantity", column="order_quantity"),
@FieldResult(name="item",
column="order_item")
}
)
},
columns={
@ColumnResult(
name="item_name"
)
}
)
@Entity
public class Order {
@Id
protected int id;
protected long quantity;
protected Item item;
...
}
示例 1-10 Item
实体
@Entity
public class Item {
@Id
protected int id;
protected String name;
...
}
示例 1-11
结合使用 @SqlResultSetMapping
与 @ColumnResult
的原生查询
Query q = entityManager.createNativeQuery(
"SELECT o.id
AS order_id,
" +
"o.quantity AS order_quantity, " +
"o.item
AS order_item, " +
"i.name
AS item_name, " +
"FROM Order o, Item i " +
"WHERE (order_quantity > 25) AND (order_item = i.id)",
"OrderResults"
);
List resultList = q.getResultList();
// List of Object arrays:{[Order, "Shoes"], [Order,
"Socks"], ...}
@DiscriminatorColumn
默认情况下,当 @Inheritance
属性策略为
InheritanceType.SINGLE_TABLE
或
JOINED
时,JPA
持续性提供程序将创建一个名为
DTYPE
的标识符列以区分继承层次中的类。
使用
@DiscriminatorColumn
批注:
-
指定一个标识符列名(如果数据模型中的列名不是默认列名
DTYPE
)。
-
指定一个适用于应用程序或事先存在的数据模型的标识符列长度
-
微调数据库中的标识符列的特征
表 1-9
列出了此批注的属性。有关更多详细信息,请参阅 API
。
表 1-9 @DiscriminatorColumn
属性
属性
|
必需
|
说明
|
columnDefinition
|
|
默认值:空
String
。
默认情况下,JPA
持续性提供程序使用最少量 SQL
创建一个数据库表列。
如果需要使用更多指定选项创建的列,请将
columnDefinition
设置为在针对列生成 DDL
时希望 JPA
使用的 SQL
片断。
|
discriminatorType
|
|
默认值:
DiscriminatorType.STRING
。
默认情况下,JPA
持续性提供程序假设标识符类型为
String
。
如果要使用其他类型,请将
discriminatorType
设置为
DiscriminatorType.CHAR
或
DiscriminatorType.INTEGER
。
您的 @DiscriminatorValue
必须符合此类型。
|
length
|
|
默认值: 31
默认情况下,JPA
持续性提供程序假设标识符列在用于保存
String
值时的最大长度为 255
个字符。
如果该列不适合于您的应用程序或数据库,请将
length
设置为适合于您的数据库列的
int
值。
您的 @DiscriminatorValue
必须符合此长度。
|
name
|
|
默认值:JPA
持续性提供程序假设标识符列名为“
DTYPE
”
。
要指定其他列名,请将
name
设置为所需的
String
列名。
|
示例 1-12
显示了如何使用此批注指定一个名为
DISC
、类型为
STRING
、长度为 20
的标识符列。在本示例中,该类的 @DiscriminatorValue
指定为
CUST
。示例 1-13
中的子类将它自己的
@DiscriminatorValue
指定为
VIP
。在
Customer
和
ValuedCustomer
中,@DiscriminatorValue
的值必须可以转换为由 @DiscriminatorColumn
属性
discriminatorType
指定的类型,并且必须符合 @DiscriminatorColumn
属性
length
。
示例 1-12 @DiscriminatorColumn
和
@DiscriminatorValue —
根类
@Entity
@Table(name="CUST")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="DISC", discriminatorType=STRING,
length=20)
@DiscriminatorValue(value-"CUST")
public class Customer {
...
}
示例 1-13 @DiscriminatorValue —
子类
@Entity
@DiscriminatorValue(value="VIP")
public class ValuedCustomer extends Customer {
...
}
@DiscriminatorValue
默认情况下,当 @Inheritance
属性策略为
InheritanceType.SINGLE_TABLE
或
JOINED
时,JPA
持续性提供程序使用
@DiscriminatorColumn
按实体名称区分继承层次中的类(请参阅 @Entity
)。
使用
@DiscriminatorValue
批注指定用于区分此继承层次中的实体的标识符值:
-
如果实体名称不适合于此应用程序
-
匹配现有的数据库模式
表 1-10
列出了此批注的属性。有关更多详细信息,请参阅 API
。
表 1-10 @DiscriminatorValue
属性
示例 1-14
显示了如何使用此批注指定一个名为
DISC
、类型为
STRING
、长度为 20
的标识符列。在本示例中,该类的 @DiscriminatorValue
指定为
CUST
。示例 1-15
中的子类将它自己的
@DiscriminatorValue
指定为
VIP
。在
Customer
和
ValuedCustomer
中,@DiscriminatorValue
的值必须可以转换为由 @DiscriminatorColumn
属性
discriminatorType
指定的类型,并且必须符合 @DiscriminatorColumn
属性
length
。
示例 1-14 @DiscriminatorColumn
和
@DiscriminatorValue —
根类
@Entity
@Table(name="CUST")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="DISC", discriminatorType=STRING,
length=20)
@DiscriminatorValue(value-"CUST")
public class Customer {
...
}
示例 1-15 @DiscriminatorValue —
子类
@Entity
@DiscriminatorValue(value="VIP")
public class ValuedCustomer extends Customer {
...
}
@Embeddable
默认情况下,JPA
持续性提供程序假设每个实体均持久保存到它自己的数据库表。
使用
@Embeddable
批注指定一个类,该类的实例存储为拥有实体的固有部分并共享该实体的身份。嵌入对象的每个持久属性或字段都将映射到实体的数据库表。
此批注没有属性。有关更多详细信息,请参阅
API
。
示例 1-16
显示了如何使用此批注指定:类
EmploymentPeriod
在用作批注为 @Embedded
的持久字段的类型时可以嵌套到实体中(请参阅示例 1-17
)
示例 1-16 @Embeddable
@Embeddable
public class EmploymentPeriod {
java.util.Date startDate;
java.util.Date endDate;
...
}
分享到:
相关推荐
Java 程序使用 JPA 注解详解 Java 持久层 API(Java Persistence API)是一种 Java 应用程序接口,用于访问、管理和持久化数据之间的关系。JPA 使用注解来定义实体类与数据库表之间的映射关系,本文将详细介绍 JPA ...
Java 程序使用 JPA 注解详解 Java 程序使用 JPA 注解可以实现对象关系映射(ORM),使得 Java 应用程序能够与关系数据库进行交互。JPA(Java Persistence API)提供了多种注解来定义实体类与数据库表之间的映射关系...
JPA注解详解 JPA(Java Persistence API)是Java企业版5(Java EE 5)的一部分,提供了一个对象关系映射方法,使得开发者可以使用声明方式定义如何将Java对象映射到关系数据库表。在JPA中,批注是一种使用元数据...
**JPA注解详解** Java Persistence API(JPA)是一种Java平台上的标准,用于管理和持久化对象关系映射(ORM)。在JPA中,注解是声明性编程的一部分,允许开发者在实体类上直接定义数据存储相关的元数据,简化数据库...
本资料主要探讨Java程序中如何有效利用JPA注解进行数据库交互。 在Java程序中,JPA注解通常应用于实体类(Entity)及其属性上,这些注解定义了实体与数据库表之间的关系。例如,`@Entity`注解标记一个类为数据库表...
9. **@OneToOne, @OneToMany, @ManyToMany**:这三种注解分别用于定义一对一、一对多和多对多的关系映射,它们也包含fetch和cascade属性,以处理关联对象的加载和操作。 10. **@JoinColumn, @JoinTable**:这两个...
Jpa注解的各种jpa注释详解
### JPA注解参考知识点详解 #### 一、引言 Java Persistence API(简称JPA)作为Java企业版5(Java EE 5)标准的一部分,是Enterprise JavaBeans(EJB)3.0规范的重要组成部分。它极大地简化了EJB持久化,并提供了...
**JPA注解@Access详解** Java Persistence API (JPA) 是Java中用于对象关系映射(ORM)的标准框架,它允许开发人员将Java类与数据库表进行映射,从而简化数据操作。在JPA中,`@Access`注解是用于指定实体属性访问...
**JPA注解详解** Java Persistence API (JPA) 是Java平台上的一个规范,用于管理关系数据库中的对象。它提供了一种面向对象的方式来操作数据库,而无需深入理解SQL。在这个文档中,我们将深入探讨JPA中的一些核心...
### JPA注解编程知识点详解 #### 一、引言 在现代软件开发过程中,持久化数据至数据库是一项常见的需求。Java Persistence API (JPA) 作为一种标准规范,提供了对象关系映射(ORM)功能,使得Java开发者可以更加...
### JPA注解详解:构建高效数据库映射与操作 #### 概述 JPA(Java Persistence API)作为Java EE 5(Java Platform, Enterprise Edition)标准的一部分,为EJB 3.0提供了对象关系映射(ORM)的能力。它不仅简化了...
### JPA注解详解 #### 一、概述 Java Persistence API (JPA) 是 Java 社区标准 JSR-317 的一部分,它提供了一种面向对象的方式来处理数据库操作,极大地方便了 Java 应用程序对关系数据库的操作。JPA 主要包括两个...
**JPA注解详解(一)** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化对象到数据库。它简化了在Java应用中处理关系数据库的过程,通过提供一套注解来声明对象与数据库表之间的映射。本篇...
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第13讲 JPA中的多对多双向关联实体定义与注解设置.avi
**JPA注解详解** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种对象/关系映射(ORM)机制,使得开发人员可以使用面向对象的编程方式来操作数据库。在JPA中,注解...
### JPA注解详解 Java Persistence API (JPA) 是一种用于管理关系型数据库对象的标准。JPA 使用注解和 XML 来配置实体类与数据库表之间的映射关系。本文将详细解读 JPA 注解的基本用法,并通过 Hibernate 框架作为...
### JPA注解详解 Java Persistence API (JPA) 是一种用于管理关系型数据库对象的标准。JPA 使用注解来简化对象与关系映射(ORM)的过程,这使得开发者能够更加专注于业务逻辑而不是数据访问层的细节。下面将详细...