[Fwd: Inheritance problem(migrate from 1.0.3 to 1.0.4)]

Armin Waibel <[email protected]>
Newsgroups gmane.comp.jakarta.ojb.user
Message-ID <[email protected]>

-------- Original Message --------
Subject: 	Inheritance problem(migrate from 1.0.3 to 1.0.4)
Date: 	Thu, 12 Oct 2006 17:47:31 +0800
From: 	Ohara Su <[email protected]>
To: 	[email protected]



Hi

I can not find the way to join mail list.
Please forward it to the mail list.


I read http://db.apache.org/ojb/docu/guides/advanced-technique.html
<http://db.apache.org/ojb/docu/guides/advanced-technique.html>
and I use Mapping Inheritance Hierarchies/Table Per Subclass via Foreign
Key.
My java class are list below.
When I call PB API to store DriverDownloadLog, I got errors in ojb 1.0.4

[org.apache.ojb.broker.accesslayer.JdbcAccessImpl ] ERROR:
* SQLException during execution of sql-statement:
* sql statement was 'INSERT INTO DriverDownloadLog
(id,fileTile,fileName,fileSize,driverID,UserActionLogID) VALUES
(?,?,?,?,?,?) '
* Exception message is [ORA-02291: integrity constraint (
SVTS.DRIVERDOWNLOADLOG_FK_1) violated - parent key not found
]
* Vendor error code [2291]
* SQL state code [23000=INTEGRITY CONSTRAINT VIOLATION]
* Target class is 'com.via.sv.domain.DriverDownloadLog'
* PK of the target object is [id=520]
* Source object: com.via.sv.domain.DriverDownloadLog@859367
* The root stack trace is -->
* java.sql.SQLException: ORA-02291: integrity constraint
(SVTS.DRIVERDOWNLOADLOG_FK_1) violated - parent key not found

and p6spy shows
UPDATE OJB_HL_SEQ SET MAX_KEY='520',GRAB_SIZE='1',VERSION='520' WHERE
TABLENAME = 'SEQ_UserActionLog'  AND VERSION = '519'
UPDATE OJB_HL_SEQ SET MAX_KEY='519',GRAB_SIZE='1',VERSION='519' WHERE
TABLENAME = 'SEQ_UserActionLog'  AND VERSION = '518'
INSERT INTO UserActionLog
(id,machineIP,actionName,actionDate,actionDescription,userAccount)
VALUES ('519','127.0.0.1 <http://127.0.0.1>','Download
Driver','2006-10-12 17:16:06.875','Download Driver','creator')
INSERT INTO DriverDownloadLog
(id,fileTile,fileName,fileSize,driverID,UserActionLogID) VALUES
('520','Bug Report','borg.jpg','258041','80','0')


It seems that child class can not get the parent's key.
but it works fine in ojb 1.0.3
I don't know why there are errors in 1.0.4
Is it a bug for 1.0.4 ?
Or I made something wrong ?



===============================================================================
/**
  * @ojb.class
  *   table = "UserActionLog"
  *   include-inherited  = "false"
  *   determine-extents = "false"
  * @ojb.field
  *   name = "userAccount"
  *   length = "254"
  *   jdbc-type = "VARCHAR"
  */
public class UserActionLog implements Serializable {

     /**
      * @ojb.field
      *      id="1"
      *      autoincrement="ojb"
      *      jdbc-type="INTEGER"
      *   primarykey="true"
      */
     private int id;

     /**
      * @ojb.field
      *   id = "2"
      *   length = "254"
      *   jdbc-type = "VARCHAR"
      */
     private String machineIP;

     /**
      * @ojb.field
      *   id = "3"
      *   length = "254"
      *   jdbc-type = "VARCHAR"
      */
     private String actionName;

     /**
      * @ojb.field
      *   id = "4"
      *   conversion =
"org.apache.ojb.broker.accesslayer.conversions.JavaDate2SqlTimestampFieldConversion 


"
      *   jdbc-type = "TIMESTAMP"
      *   nullable = "true"
      */
     private Date actionDate;

     /**
      * @ojb.field
      *   id = "5"
      *   length = "254"
      *   jdbc-type = "VARCHAR"
      */
     private String actionDescription;

     /**
      * @ojb.reference
      *   auto-retrieve = "true"
      *   foreignkey = "userAccount"
      *   auto-update = "link"
      *   auto-delete = "none"
      *   class-ref = "VIAUser"
      *   proxy = "false"
      */
     private VIAUser actor;

================================================================================ 




/**
  * @ojb.class
  *   table = "DriverDownloadLog"
  *   include-inherited  = "false"
  * @ojb.field
  *   name = "UserActionLogID"
  *   jdbc-type = "INTEGER"
  * @ojb.reference class-ref="UserActionLog"
  *      auto-retrieve="true"
  *   auto-update="object"
  *   auto-delete="object"
  *   foreignkey="UserActionLogID"
  */
public class DriverDownloadLog extends UserActionLog {

     /**
      * @ojb.field
      *      id="1"
      *      autoincrement="ojb"
      *      jdbc-type="INTEGER"
      *   primarykey="true"
      */
     private int id;

     /**
      * @ojb.field
      *   id = "2"
      *   length = "254"
      *   jdbc-type = "VARCHAR"
      */
     private String fileTile;

     /**
      * @ojb.field
      *   id = "3"
      *   length = "254"
      *   jdbc-type = "VARCHAR"
      */
     private String fileName;

     /**
      * @ojb.field
      *      id="4"
      *      jdbc-type="BIGINT"
      */
     private long fileSize;

     /**
      * @ojb.field
      *      id="5"
      *      jdbc-type="INTEGER"
      *      nullable = "false"
      */
     private int driverID;
================================================================================
         DriverDownloadLog downloadLog = new DriverDownloadLog();
         downloadLog.setActor(viaUser);
         downloadLog.setMachineIP(ip);
         downloadLog.setActionDate(new java.util.Date());
         downloadLog.setActionDescription("Download Driver");
         downloadLog.setActionName("Download Driver");
         downloadLog.setFileTile(fileTitle);
         downloadLog.setFileName(fileName);
         downloadLog.setFileSize(fileSize);
         downloadLog.setDriverID (driverID);
         try {
             getPersistenceBrokerTemplate().store(downloadLog);
         } catch (DataAccessException e) {
             logger.error(e);
             throw new DriverManagerException(e);
         }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.