我正在使用oracle sql developer并创建一个名为avatar
的表。它有两列avatarid
和image
。
我还为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;
}
.
.
答案 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")