【问题标题】:EclipseLink error when persisting an entity ( id null )持久化实体时出现 EclipseLink 错误(id null)
【发布时间】:2017-09-27 04:46:40
【问题描述】:

Stacktrace 1:来自方法“submitTicket”第 74 行的错误,即:em.persist(bean);

at com.sun.proxy.$Proxy237.creer(Unknown Source)
    at projet.helpdesk.dao.__EJB31_Generated__TicketDao__Intf____Bean__.creer(Unknown Source)
    at projet.helpdesk.form.CreationTicketForm.soumettreTicket(CreationTicketForm.java:74)

堆栈跟踪 2:

    Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150605-31e8258): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-01502: index 'BDD2.TICKETS_PK' or partition of such index is in unusable state

Error Code: 1502
Call: INSERT INTO Tickets (ID_TICKET, DATE_ENVOI, DATE_FERMETURE, DESCRIPTION, ETAT, ID_EMPLOYE, ID_TECHNICIEN, PRIORITE, SUJET) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
    bind => [9 parameters bound]
Query: InsertObjectQuery(projet.helpdesk.beans.Ticket@1d796c68)
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:331)

提到 ORA-1502 错误在我重新启动电脑后开始显示,在此之前它是描述重复值问题的 ORA-0001 错误。

当我通过em.persist(bean); 插入bean 时,主键又名id_ticket 设置为null,它是Oracle 中使用的触发器,用于增加值。

【问题讨论】:

  • 我认为这个错误与 ejb 或 java 无关 - dba-oracle.com/…
  • 我已经花了两个小时阅读 ORA ERRORS 文档,无论如何我想我不应该依赖 ORACLE 跳跳虎来生成主键,只要它对我不起作用,我会尝试学习如何通过 JPQL 序列生成 PKey。

标签: ejb eclipselink jpql


【解决方案1】:

Java 持久性查询语言似乎为插入时没有值的主键生成 0,而不是将它们作为空对象发送,所以我只是更改了 ORACLE 中生成主键的触发器,如下所示:

create or replace trigger "BI_TICKETS"   
  before insert on "TICKETS"               
  for each row  
begin   
  if :NEW."ID_TICKET" is null or :NEW."ID_TICKET"=0 then 
    select "TICKETS_SEQ".nextval into :NEW."ID_TICKET" from dual; 
  end if; 
end; 
​

:NEW."ID_TICKET"= 0 添加到条件中,就完成了。

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2011-09-17
    • 2016-03-28
    • 2016-01-23
    • 2023-03-17
    • 2023-04-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多