Spring JPA 注解@Id @GeneratedValue @GenericGenerator

在Spring JPA中,通常使用@Id和@GeneratedValue注解来指定实体的主键及其生成策略。然而,@GeneratedValue注解默认支持的生成策略(如IDENTITY, SEQUENCE, AUTO, TABLE等)可能不完全满足所有数据库或特定场景下的需求。在某些情况下,可能需要更复杂的生成策略,这时可以使用Hibernate特有的@GenericGenerator注解来定义。

@GenericGenerator是Hibernate提供的一个高级特性,允许自定义主键的生成策略。它可以通过XML配置或注解的方式来实现。以下是如何在Spring JPA的实体类中使用@GenericGenerator注解的一个例子:
示例
假设想要使用自定义的序列(或类似的机制)来生成主键,但数据库并不直接支持JPA标准的SEQUENCE生成策略,或者想要在生成主键时执行一些额外的逻辑。

import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  
import org.hibernate.annotations.GenericGenerator;  
  
@Entity  
public class MyEntity {
   
     
  
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "myCustomGenerator") // 注意这里strategy的值仅为占位符,Hibernate会忽略它  
    @GenericGenerator(name = "myCustomGenerator",   
                      strategy = "com.example.MyCustomGeneratorStrategy",  
                      parameters = {
   
     
                          @Parameter(name = "param1", value = "value1"),  
                          @Parameter(name = "param2", value = "value2")  
                      })  
    private Long id;  
  
    // 其他字段和getter/setter方法  
}

注意:

  1. @GeneratedValue注解中的strategy属性在这里实际上被Hibernate忽略了,因为通过@GenericGenerator定义了自己的生成策略。但是,由于JPA规范的要求,不能省略@GeneratedValue注解。
  2. 在@GenericGenerator注解中,name属性指定了生成器的名称,这个名称需要与@GeneratedValue中的generator属性相匹配。
  3. strategy属性指定了自定义生成策略的实现类。这个类需要实现Hibernate的org.hibernate.id.IdentifierGenerator接口。<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值