【问题标题】:Autoincrement column in oracle using hibernateoracle中使用休眠的自动增量列
【发布时间】:2013-05-06 06:40:09
【问题描述】:

我正在使用休眠注释。我想将一列设为自动递增。我在数据库(oracle)中创建了一个序列,并将该序列映射到 java POJO 类中。我是否也需要为该序列创建触发器?我想知道我们如何在使用休眠注释时使列自动递增?我必须在 java 和数据库方面做哪些改变?请帮助我。以下是我映射序列的代码部分。

public class SimRuns implements Serializable {

    private static final long serialVersionUID = 8698324570356602407L;

    @Id @Column(name = "RUN_ID")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_run_id")
    @SequenceGenerator(name="seq_run_id", sequenceName="seq_run_id")
    private Long runId;
}

【问题讨论】:

  • 您是否在数据库端创建了触发器/序列?

标签: java hibernate


【解决方案1】:

这对我有用:

@Id
@GeneratedValue(generator = "nosicSeq")
@SequenceGenerator(name = "nosicSeq", sequenceName = "NOSIC_SEQ", allocationSize = 1)
@Column(name = "SID")
private BigDecimal sid;

不需要数据库中的触发器,只需序列。

【讨论】:

    【解决方案2】:

    尝试移除生成器并设置为自动生成类型

    【讨论】:

      【解决方案3】:
      @Id @Column(name = "RUN_ID")
      @GeneratedValue(strategy=GenerationType.AUTO)
      @SequenceGenerator(name="seq_run_id", sequenceName="seq_run_id")
      private Long runId;
      

      Hibernate 可能是唯一一个根据您的数据库类型选择正确生成策略的 JPA 提供程序。使用GenerationType.AUTO 语句hibernate 将尝试选择最佳策略来实现增加的行ID。

      【讨论】:

        【解决方案4】:
        1. 在 Oracle 中:不需要 Oracle 触发器,但顺序是必须的。

        2. 在 pojo 中:您可以像这样使用注释:

          @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="majorsSeq") @SequenceGenerator(name="majorsSeq", sequenceName="MAJORS_SEQ", allocationSize = 1,initialValue = 1) 公共 int getId() { 返回标识; }

        【讨论】:

          猜你喜欢
          • 2012-04-17
          • 2011-03-25
          • 1970-01-01
          • 2016-09-01
          • 2011-01-01
          • 2015-06-08
          • 2014-04-13
          • 1970-01-01
          相关资源
          最近更新 更多