编辑:
@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的不同线程,我发现了:
我刚刚粘贴了以上几点,所以我可以展示我已经做过的事情。
但在我的Oracle数据库中,我有这个序列,我可以使用nextval
执行select。
如果问题来自数据库方面或java,请告诉我?任何建议/意见将不胜感激。
答案 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自动使用序列。所以我现在提供给该序列的补助金。