2013-05-06 71 views
1

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

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; 
} 
+1

你对数据库端创建的触发器/序列? – Dropout 2013-05-06 06:47:40

回答

0

尝试取出发电机和设置自动的generationType

1

这个工作对我来说:

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

在DB没有触发需要,只是顺序。

0
@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。

0
  1. 在Oracle中:它不需要Oracle触发器,但序列是必须的。

  2. 在POJO:您可以使用标注这样的:

    @Id @GeneratedValue(策略= GenerationType.SEQUENCE,发电机= “majorsSeq”) @SequenceGenerator(NAME = “majorsSeq”,sequenceName =“MAJORS_SEQ”,allocationSize = 1,initialValue = 1) public int getId(){ return id; }