spring-data-aop 常用注解解释
@Entity
@Entity
用于将一个 Java 类标记为一个实体类,即这个类代表数据库中的一个表。以下是 @Entity
注解的各个参数的详细解释:
1. name
- 类型:
String
- 描述:指定实体的名称。这是实体的全局唯一标识。如果不指定,JPA 提供商会使用实体类的名称。
- 示例:
@Entity(name = "UserEntity") public class User { // ... }
@Table
@Table
注解在 JPA 中用于指定实体类与数据库表之间的映射关系。
1.name
- 类型:
String
- 描述:指定映射到实体类的数据库表的名称。如果不指定,JPA 默认使用实体类的名称作为表名。
- 示例:
@Table(name = "user_table") public class User { // ... }
2.catalog
- 类型:
String
- 描述:指定表所在的数据库目录(catalog)的名称。这在一些数据库系统中可能不适用。
- 示例:
@Table(name = "user", catalog = "my_catalog") public class User { // ... }
3.schema
- 类型:
String
- 描述:指定表所在的数据库模式(schema)的名称。这在一些数据库系统中可能不适用。
- 示例:
@Table(name = "user", schema = "my_schema") public class User { // ... }
4.uniqueConstraints
- 类型:
UniqueConstraint[]
- 描述:定义表的列的唯一性约束。可以指定一个或多个列的组合作为唯一索引。
- 示例:
@Table(uniqueConstraints = { @UniqueConstraint(name = "unique_name", columnNames = "name"), @UniqueConstraint(name = "unique_email", columnNames = "email") }) public class User { // ... }
5.indexes
- 类型:
Index[]
- 描述:定义表的索引。可以指定一个或多个列的组合作为索引。
- 示例:
@Table(indexes = { @Index(name = "index_name", columnList = "name"), @Index(name = "index_email", columnList = "email") }) public class User { // ... }
:info:
catalog
和schema
属性在MySQL
数据库系统中可能不适用
@Column 字段映射
在 JPA (Java Persistence API) 中,@Column
注解用于映射实体类的字段到数据库表的列。这个注解提供了多个参数来定义列的属性,以下是 @Column
注解的各个参数的详细解释:
1. name
- 类型:
String
- 描述:指定数据库表中列的名称。如果不指定,JPA 会使用实体类字段的名称作为列名。
- 示例:
@Column(name = "first_name") private String firstName;
2. columnDefinition
- 类型:
String
- 描述:自定义列的 SQL 类型,允许你指定列的 SQL 类型和大小等详细信息。
- 示例:
@Column(columnDefinition = "VARCHAR(100) NOT NULL") private String username;
3. nullable
- 类型:
boolean
- 描述:指定列是否可以为
NULL
。默认值为true
,表示列可以为NULL
。 - 示例:
@Column(nullable = false) private String username;
4. unique
- 类型:
boolean
- 描述:指定列是否具有唯一性约束。默认
false
。 - 示例:
@Column(unique = true) private String email;
5. length
- 类型:
int
- 描述:指定列的最大长度。这个参数只对字符串类型的列有效。
- 示例:
@Column(length = 50) private String firstName;
6. precision
- 类型:
int
- 描述:指定列的数值精度,表示列可以存储的数字的总位数。对数据库的
DECIMAL
类型的列有效。 - 示例:
@Column(precision = 10, scale = 2) private BigDecimal amount;
7. scale
- 类型:
int
- 描述:指定列的数值精度,表示列的数值的小数精度。对数据库的
DECIMAL
类型的列有效。 - 示例:
@Column(precision = 10, scale = 2) private BigDecimal amount;
8. insertable
- 类型:
boolean
- 描述:指定在插入操作时是否包含该列。默认
true
。 - 示例:
@Column(insertable = false) private Date lastUpdated;
9. updatable
- 类型:
boolean
- 描述:指定在更新操作时是否包含该列。默认
true
。 - 示例:
@Column(updatable = false) private Date lastUpdated;
10. table
- 类型:
String
- 描述:指定列所属的表名。在多表继承的情况下使用。
- 示例:
@Column(table = "employee") private String employeeName;
11. columnDefinitionOverrides
- 类型:
ColumnDefinitionOverride[]
- 描述:允许为不同的数据库提供不同的列定义。
- 示例:
@Column(columnDefinitionOverrides = { @ColumnDefinition(dbType = "varchar", length = 50, name = "username"), @ColumnDefinition(dbType = "varchar", length = 100, name = "email") }) private String username;
@Id 主键映射
@Id
用于将一个 Java 类属性标记为主键
@GeneratedValue 主键生成策略
@GeneratedValue
是 JPA 中用于指定实体类中主键字段生成策略的注解。以下是 @GeneratedValue
注解的详细说明:
1. strategy
- 类型:
GenerationType
- 描述:指定主键的生成策略。
GenerationType
是一个枚举,定义了以下几种策略:IDENTITY
:使用数据库的自增字段来生成主键,适用于支持自增的数据库,如 MySQL、PostgreSQL。SEQUENCE
:通过数据库序列来生成主键,适用于 Oracle。TABLE
:通过一个特定的数据库表来生成主键,这个表用于模拟序列。AUTO
:JPA 自动选择合适的策略 [默认选项]。
- 示例:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
2. generator
- 类型:
String
- 描述:指定生成器的名称,用于与
@GenericGenerator
或@SequenceGenerator
、@TableGenerator
注解结合使用,自定义主键生成策略。 - 示例:
@Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") private String id;
@GeneratedValue
注解通常与@Id
注解一起使用,标识实体类中的字段为主键,并且定义了该主键的生成策略。这个注解可以放在字段上,也可以放在字段的 getter 方法上,但不能同时放在两者上,否则会抛出异常。
@GenericGenerator 主键生成策略
@GenericGenerator
是 JPA 中 Hibernate 提供的一个注解,用于定义自定义的主键生成策略。以下是 @GenericGenerator
注解的详细说明:
1. name
- 类型:
String
- 描述:指定生成器的名称,这个名称需要与
@GeneratedValue
注解中的generator
属性相匹配。 - 示例:
@GenericGenerator(name = "myGenerator", strategy = "myStrategy")
2. strategy
- 类型:
String
- 描述:指定生成策略的类名或策略名称。这个类需要实现
org.hibernate.id.IdentifierGenerator
接口。 - 示例:
@GenericGenerator(name = "myGenerator", strategy = "com.example.MyIdentifierGenerator")
3. parameters
- 类型:
Parameter[]
- 描述:定义生成策略所需的参数。这些参数会传递给生成策略的构造函数或
configure
方法。 - 示例:
@GenericGenerator(name = "myGenerator", strategy = "myStrategy", parameters = { @Parameter(name = "paramName", value = "paramValue") })
@GenericGenerator
注解允许开发者自定义主键生成逻辑,这在标准的 @GeneratedValue
策略无法满足需求时非常有用。例如,需要一个基于特定算法生成的 UUID,或者需要根据业务逻辑生成的主键。
在使用 @GenericGenerator
时,您需要定义一个生成策略类,并在 @GenericGenerator
中指定这个类的名称或策略名称。同时,可通过 parameters
属性传递必要的参数给生成策略。
以下是 @GenericGenerator
的一个使用示例,其中定义了一个自定义的 UUID 生成策略:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity
public class MyEntity {
//在这个例子中,@GeneratedValue 注解的 strategy 属性被设置为 TABLE,但实际上这个值是一个占位符,Hibernate 会忽略它,而是使用 @GenericGenerator 注解中定义的 strategy 属性来生成主键。@GenericGenerator 注解指定了生成策略为 uuid,这通常对应于 org.hibernate.id.UUIDGenerator 类
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "myCustomGenerator") // 注意这里strategy的值仅为占位符,Hibernate会忽略它
@GenericGenerator(name = "myCustomGenerator",
strategy = "uuid")
private Long id;
}
@Transient 不映射字段
@Transient
是 JPA(Java Persistence API)中的一个注解,用于标记实体类中的字段,表明该字段不是实体的一部分,即它不会被映射到数据库表的列中。这个注解通常用于两种情况:
-
临时状态
- 当字段仅在应用程序的内存中使用,不需要持久化到数据库时,可以使用
@Transient
注解。例如,一些计算字段或者临时状态标记。
- 当字段仅在应用程序的内存中使用,不需要持久化到数据库时,可以使用
-
延迟加载
- 当字段的加载不是立即需要的,可以将其标记为
@Transient
,以延迟加载该字段,直到实际需要时才从数据库中检索。
- 当字段的加载不是立即需要的,可以将其标记为
以下是 @Transient
注解的详细说明:
-
name
- 类型:
String
- 描述:为字段指定一个可选的名称。这在某些 JPA 实现中可能用于特定的目的,但在标准的 JPA 使用中通常不需要设置。
- 默认值:无
- 类型:
-
value
- 类型:
boolean
- 描述:设置为
true
表示字段是瞬态的,不持久化。在 JPA(Java Persistence API)中,当一个字段被标记为瞬态的(transient),意味着这个字段在实体的生命周期中不会被持久化到数据库中。它只在应用程序的内存中存在,不会被包含在数据库操作(如插入、更新、删除)中
- 默认值:
true
(因为value
是boolean
类型,所以如果没有指定,默认为false
)
- 类型:
示例:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
@Entity
public class User {
@Id
private Long id;
private String name;
@Transient
private String temporaryData; // 这个字段不会被持久化到数据库
// 其他字段和getter/setter方法
}
在这个例子中,User
实体类有一个 temporaryData
字段,使用了 @Transient
注解,表示这个字段是瞬态的,不会映射到数据库表中。
使用 @Transient
注解的好处包括:
- 减少数据库负载:不需要持久化的字段不会增加数据库的存储负担。
- 提高性能:避免不必要的数据库操作,特别是在处理大量数据时。
- 灵活性:可以在不改变数据库结构的情况下,灵活地在应用程序中使用临时数据。
总之,@Transient
注解是一个简单但非常有用的工具,用于控制实体类中哪些字段需要持久化,哪些字段仅在内存中使用。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » spring-data-aop 常用注解解释
发表评论 取消回复