【问题标题】:nested exception is org.hibernate.exception.SQLGrammarException: ORA-02289: sequence does not exist嵌套异常是 org.hibernate.exception.SQLGrammarException: ORA-02289: 序列不存在
【发布时间】:2014-08-31 18:04:40
【问题描述】:

编辑:

@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”

我只是在上面粘贴了这几点,所以我可以展示我已经做了什么。

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

请告诉我,如果问题出在数据库端或 java 端?任何建议/建议将不胜感激。

【问题讨论】:

  • 别管其他帖子的其他问题,你有什么具体问题?我在您的帖子中没有看到任何问题。
  • @JamesB 我已经编辑了我的问题。
  • 您确定您的序列存在于您的应用程序使用的数据库架构中吗?
  • @JamesB 是的,它就在那里。我也重新创建了它。但仍然得到同样的例外。我还执行了选择 CUSTOMER_ID_sequence.nextval,这给了我正确的结果。
  • 如下所述,如果应用程序使用与序列所有者不同的模式,您可能需要检查此序列的授权。

标签: java oracle hibernate sequence


【解决方案1】:

如果您的声明 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 或为此序列创建公共同义词。

【讨论】:

  • 我提到的 4 点来自其他网站。 CUSTOMER_ID_sequence 只是一个例子。实际上我正在使用 olt_id_SEQ 序列并且在代码中也使用了相同的序列。我的数据库中也有相同的序列。我也必须尝试授予。
  • 我以为 customer_id_sequence 只是问题的一个例子,但事实证明这是正在使用的序列,代码没有引用它。
  • @Aamir,你需要小心你的发帖方式,这很混乱。看看上面的 cmets:你说你对你的数据库运行了语句“select CUSTOMER_ID_sequence.nextval”并且它是成功的。现在你说这只是一个示例名称。
【解决方案2】:

我的问题现在解决了。 Hibernate 自动使用序列。因此,我为该序列提供了授权,现在它正在运行。

【讨论】:

  • 您应该接受我提供的答案,因为它说明了有关赠款的问题,实际上是您的问题。
猜你喜欢
  • 1970-01-01
  • 2015-07-22
  • 2015-06-30
  • 1970-01-01
  • 2021-09-19
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
相关资源
最近更新 更多