嵌套异常是org.hibernate.exception.SQLGrammarException:ORA-02289:序列不存在

时间:2014-07-10 11:23:37

标签: java oracle hibernate sequence

编辑:

@NamedQueries({
    @NamedQuery(name="getOLTsByProcessStateAndAssignee",query="select o from Olt o where o.activityProcessId IN(:procId) order by modifiedtime desc"),
    @NamedQuery(name="getOLTsByProcessStateAndAssigneeForSearch",query="select o from Olt o where o.activityProcessId IN(:procId) and o.name like :name order by modifiedtime desc"),
    @NamedQuery(name="findOltbyname",query="select o from Olt o where o.name=:oltname and o.jioCenter.id=:jioCenterId"),
 })
@XmlRootElement(name="Olt") @Audited @Entity
@Table(name="olt")
public class Olt extends BaseEntity implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;


    /*@GeneratedValue(generator="olt_id_gen")
    @GenericGenerator(name = "olt_id_gen",
        strategy = "com.inn.fttx.model.IntegerSequenceGenerator",
        parameters = {
            @Parameter(name="sequence" , value="OLT_ID_SEQ")
        })
    @Id  */



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

这里我得到以下异常 -

嵌套异常是org.hibernate.exception.SQLGrammarException:ORA-02289:序列不存在

我已经看到了coderanch和stackoverflow的不同线程,我发现了:

  1. Oracle数据库正在运行(最有可能)
  2. 您的应用已与之相连(最有可能)
  3. 您已连接到正确的数据库(可能/可能不是)
  4. 实际上有一个名为“olt_id_SEQ”的序列表
  5. 我刚刚粘贴了以上几点,所以我可以展示我已经做过的事情。

    但在我的Oracle数据库中,我有这个序列,我可以使用nextval执行select。

    如果问题来自数据库方面或java,请告诉我?任何建议/意见将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您的语句There is actually a sequence table called "CUSTOMER_ID_sequence"没有任何意义,因为您的代码正在尝试访问olt_id_SEQ序列。并且序列不是表格。

所以这里有两个选择:

1 - 您用于连接oracle的用户对该序列olt_id_SEQ没有适当的授权。

2 - 您在代码中使用了错误的序列,因为您提到它应该是

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

修改

OP编辑了他的问题,但这里的问题仍然与我上面提到的相同。

1 - 您用于连接oracle的用户没有对该序列olt_id_SEQ进行适当的授权,或者此序列根本不存在。要检查您在应用程序中使用的用户密码并运行此查询,请执行以下操作:

select * from all_objects where object_name = 'OLT_ID_SEQ'

如果此查询未返回任何行,则序列不存在或者它没有授予它。

查看作为序列所有者的架构是什么。如果您使用的权限有限,则可能需要使用:[schemaName] .olt_id_SEQ或为此序列创建公共synonim。

答案 1 :(得分:0)

我的问题现在解决了。 Hibernate自动使用序列。所以我现在提供给该序列的补助金。