【问题标题】:Auto Increment A Column With Hibernate使用休眠自动增加一列
【发布时间】:2014-04-13 00:23:50
【问题描述】:

我有这种情况,我需要在插入每条新记录时增加一个非主键列。此列不是主键。但是它有独特的约束。如何使用 Hibernate Annotations 来完成此特定列的自动增量?我知道对于主键可以很容易地完成它,但我希望对非主键列执行完全相同的操作(意味着不使用 @Id 注释?)

--谢谢

【问题讨论】:

    标签: hibernate annotations generator auto-increment strategy-pattern


    【解决方案1】:

    据我所知,你可以使用 Hibernate 特定的注解@Generated。您的字段将如下所示:

    @Generated(value="GenerationTime.INSERT")
    @GenericGenerator(name="fieldGenerator", strategy="sequence")
    private X field;
    

    您可以阅读不同类型的策略here

    我 90% 确定这应该可行。如果没有,请告诉我。

    【讨论】:

    【解决方案2】:

    我检查了这个,Hibernate 只允许一个自动列(每个表),它必须定义为一个键。

    除了主键列如果你尝试使用多个自动列,你会得到错误:

    [错误] o.h.t.h.SchemaUpdate - 不正确的表定义;只能有一个自动列,并且必须将其定义为键。

    您可以使用sequence 或table-use 作为sequence,并将返回值保存为seq。

    将表用作序列的简单示例:

    @Entity(name = "T1")
    
    @Table(name = "t1")
    
    public  class T1 {
    
        @Id
        @GeneratedValue
        @Column(name = "c_id")
        private Long seqId;
    
        public Long getseqId() {
            return seqId;
        }
    
        public void setseqId(Long sId) {
            this.seqId= sId;
        }
    }
    

    【讨论】:

      【解决方案3】:

      @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id;

      对我来说很好用

      【讨论】:

      • 你迟到三年才回答这个问题 :) 我已经完全转向 NoSQL 技术了。
      • @Id 表示主键和非主键列的预期答案。
      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 2016-09-01
      • 2011-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      相关资源
      最近更新 更多