首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用我自己的密钥生成策略实现@GeneratedValue

如何使用我自己的密钥生成策略实现@GeneratedValue
EN

Stack Overflow用户
提问于 2014-06-01 16:11:03
回答 3查看 623关注 0票数 1

我希望实现自己的策略来为表中的新行生成主键,例如,我希望主机的id为172.24.85.20为8520。

我能以某种方式扩展@GeneratedValue注解吗?你会推荐哪种方法?

提前10倍!

盖尔

EN

回答 3

Stack Overflow用户

发布于 2014-06-01 17:19:56

在我的项目中,我还使用了一个定制键,因为我需要在调用persist()之前就已经具有唯一标识的实体。我的解决方案不是使用@GeneratedValue注释,而是手动初始化id字段。@GeneratedValue注释依赖于您的数据库,主键由它提供。在您的示例中,id字段可以在调用EntityManager.persist()之前计算和设置,或者可以在@PrePersist注释的EntityListener方法(http://www.java2s.com/Tutorial/Java/0355__JPA/EntityListenerPreUpdate.htm)中处理该步骤。除此之外,扩展注解是不可能的(Why is not possible to extend annotations in Java?);您只能通过使用构造型来组合注解,或者创建自己的注解。

票数 0
EN

Stack Overflow用户

发布于 2014-06-03 15:50:28

您应该选中此链接:

http://blog.anorakgirl.co.uk/2009/01/custom-hibernate-sequence-generator-for-id-field/

您必须创建一个实现IdentifierGenerator的类:

代码语言:javascript
运行
复制
public class StockCodeGenerator implements IdentifierGenerator {

    private static Logger log = Logger.getLogger(StockCodeGenerator.class);

    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {

        // Here goes the id generation code
    }
}

然后在您的@GenericGenerator注释中使用它:

代码语言:javascript
运行
复制
@Id
@GenericGenerator(name="seq_id", strategy="my.package.StockCodeGenerator")
@GeneratedValue(generator="seq_id")
String myColumn;
票数 0
EN

Stack Overflow用户

发布于 2017-12-08 20:31:41

你可以试试这个有日期和日历的

代码语言:javascript
运行
复制
public class StockCodeGenerator implements IdentifierGenerator {
    private static Logger log = Logger.getLogger(StockCodeGenerator.class);
     public StockCodeGenerator() {}

     public int generateCustId() {
         Random random = new Random();
         return random.nextInt(100);
     }

     public Serializable generate(SessionImplementor session, Object object)
     throws HibernateException {
         String prefix = "Custom_String";
         Connection connection = session.connection();
         System.out.println(session.connection());

         Date date = new Date();

         Calendar calendar = Calendar.getInstance();
         return prefix + "_" + generateCustId() + "_" + calendar.get(1);
     }
}

然后在@GenericGenerator注释中使用它:

代码语言:javascript
运行
复制
@Id
@GenericGenerator(name="seq_id",strategy="com.mvc.StockCodeGenerator.
StockCodeGenerator")
@GeneratedValue(generator="seq_id")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23977909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档