org.hibernate.exception.SQLGrammarException:无法获取下一个序列值,序列也不会退出

时间:2015-09-23 05:22:58

标签: spring hibernate

我正在使用oracle sql developer并创建一个名为avatar的表。它有两列avataridimage

我还为id自动生成创建了一个触发器和序列。 但是当我将这个表与hibernate和spring工具套件一起使用时,我得到了一个例外,那就是

  

org.hibernate.exception.SQLGrammarException:无法获得下一个   序列值。

它说

  

序列不退出

我尝试了所有答案,但无法解决错误。在Sprig Tool Suite中,我使用数据源连接到数据库并在我的模式下搜索我的序列,并且我的序列没有退出。 我使用Oracle SQL Developer创建了序列和触发器。

请给我一些建议。

这是我的Avatar.hbm.xml

<hibernate-mapping>
<class name="com.bluestone.fileupload.model.Avatar" table="avatar">
<id name="avatarid" type="int">
<column name="AVATARID" />
<generator class="sequence">
<param name="my_seq">SU_AVATAR_SEQUENCE</param>
</generator>
</id>
<property name="image" type="binary">
<column name="IMAGE" not-null="true" />
</property>
</class>
</hibernate-mapping>

而且,这是我的Avatar.class

@Entity
@Table(name = "avatar")
public class Avatar{

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,  generator = "my_seq")
private int avatarid;
private byte[] image;

public Avatar() {

}

public Avatar(int avatarid, byte[] image) {
super();
this.avatarid = avatarid;
this.image = image;
}

public void setAvatarid(int avatarid) {
this.avatarid = avatarid;
}
.
.

3 个答案:

答案 0 :(得分:0)

1)确保序列在数据库中可用 2)可能你需要使用架构说例如:HR.SU_AVATAR_SEQUENCE 其中HR是模式名称 3)否则为schema

创建sysnonym

答案 1 :(得分:0)

@Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "my_seq_gen_9")
    @SequenceGenerator(name = "my_seq_gen_9", sequenceName = "SEQ_NAME_YOUR")
    @Column(name = "COLUMN")
    private long columnName;

序列可以像在休眠中一样使用。

答案 2 :(得分:0)

我遇到了同样的问题。

我的决议是:

@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "ACTIVITY_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")