Ah I see
Even replacing the key-generator with
<key-generator name="SEQUENCE" alias="www_patient_comments_seq">
<param name="sequence" value="www_patient_comments_seq" />
<param name="returning" value="true" />
<param name="trigger" value="true" />
</key-generator>
or
<key-generator name="SEQUENCE" alias="www_patient_comments_seq">
<param name="sequence" value="{0}_seq" />
<param name="returning" value="true" />
<param name="trigger" value="true" />
</key-generator>
I still get
SEVERE: A fatal error occurred while creating
org.usiis.struts.CommentForm using
SQL: {call INSERT INTO "WWW_PATIENT_COMMENTS"
("USIIS_ID","PATIENT_ID","PROVIDE
R_ID","DATE_CREATED","PAT_COMMENT","SHARE_FLAG") VALUES (?,?,?,?,?,?)
RETURNING
"PAT_COMMENT_ID" INTO ?}
java.sql.SQLException: ORA-01400: cannot insert NULL into
("HL_AIMS"."WWW_PATIEN
T_COMMENTS"."PAT_COMMENT_ID")
ORA-06512: at line 1
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
removing this line <param name="trigger" value="true" /> makes it
hang.
>>> [EMAIL PROTECTED] 04/05/05 05:05PM >>>
I'm sorry Eric, maybe my explanation has been a little to short.
The attribute SEQ_{0} is a placeholder that automaticaly replaces {0}
with your table name. In your case you need to replace SEQ_{0} with the
name of the sequence you created on oracle or setup your sequence as
follows:
CREATE SEQUENCE SEQ_WWW_PATIENT_COMMENTS MAXVALUE 2147483647
INCREMENT BY 1 START WITH 1
/
CREATE TRIGGER TRG_WWW_PATIENT_COMMENTS
BEFORE INSERT OR UPDATE ON WWW_PATIENT_COMMENTS
FOR EACH ROW
DECLARE
iCounter WWW_PATIENT_COMMENTS.pat_comment_id%TYPE;
cannot_change_counter EXCEPTION;
BEGIN
IF INSERTING THEN
Select SEQ_WWW_PATIENT_COMMENTS.NEXTVAL INTO iCounter FROM
Dual;
:new.pat_comment_id := iCounter;
END IF;
IF UPDATING THEN
IF NOT (:new.pat_comment_id = :old.pat_comment_id) THEN
RAISE cannot_change_counter;
END IF;
END IF;
EXCEPTION
WHEN cannot_change_counter THEN
raise_application_error(-20000, 'Cannot Change Counter
Value');
END;
/
You also may have a look at:
http://castor.codehaus.org/key-generator.html
The VALUES (?,?,?,?,?,?) is correct as the ? will be replaced with the
values that need to be inserted into the database.
Ralf
Eric Anderson schrieb:
><key-generator name="SEQUENCE" alias="www_patient_comments_seq">
> <param name="sequence" value="SEQ_{0}" />
> <param name="returning" value="true" />
> <param name="trigger" value="true" />
> </key-generator>
>
>
>and
>
>System.out.println("Comment: "+cForm.getComment()+"
>"+cForm.getPatientId()+" "+cForm.getPatCommentId());
>create(cForm);
>
>returns
>
>Comment: test again jan4.05.test1 null
>Apr 5, 2005 3:18:49 PM org.exolab.castor.jdo.engine.SQLEngine create
>SEVERE: A fatal error occurred while creating
>org.usiis.struts.CommentForm using
> SQL: {call INSERT INTO "WWW_PATIENT_COMMENTS"
>("USIIS_ID","PATIENT_ID","PROVIDE
>R_ID","DATE_CREATED","PAT_COMMENT","SHARE_FLAG") VALUES (?,?,?,?,?,?)
>RETURNING
>"PAT_COMMENT_ID" INTO ?}
>java.sql.SQLException: ORA-01400: cannot insert NULL into
>("HL_AIMS"."WWW_PATIEN
>T_COMMENTS"."PAT_COMMENT_ID")
>ORA-06512: at line 1
>
> at
>oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java
>:124)
> at
>oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
> at
>oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
> at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:622)
> at
>oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.
>
>
>
>Is the VALUES (?,?,?,?,?,?) the problem? Although I don't know why
>they would all be ?
>
>thanks
>
>
>
>
>>>>[EMAIL PROTECTED] 04/05/05 03:10PM >>>
>>>>
>>>>
>I use following key-generator definition with oracle.
>
> <key-generator name="SEQUENCE" alias="PCV">
> <param name="sequence" value="SEQ_{0}" />
> <param name="returning" value="true" />
> <param name="trigger" value="true" />
> </key-generator>
>
>Could you try to add the trigger tag.
>
>Ralf
>
>
>Eric Anderson schrieb:
>
>
>
>>Yup it creats fine with an artifical key. So what could be wrong
with
>>this sequence...
>>
>>Creates fine with a insert statement in oracle. I have checked
>>spelling.
>>
>>
>>
>>
>>
>>>>>[EMAIL PROTECTED] 04/05/05 12:15PM >>>
>>>>>
>>>>>
>>>>>
>>>>>
>>My first bet is something with the key-generator is screwy. Can you
>>take that out and see if it will work correctly (just fake the key
on
>>one)? Everything else looks fine.
>>
>>As far as the logging go, are you using Log4j at all? If so you can
>>set the default logging in the properties file to DEBUG for
>>
>>
>org.exolab
>
>
>>and also change the property in the castor.properties file which is
>>
>>
>in
>
>
>>the castor jar file. (forget which one, but its clearly commented)
>>
>>On Apr 5, 2005 1:48 PM, Eric Anderson <[EMAIL PROTECTED]> wrote:
>>
>>
>>
>>
>>>Seems as though I have another newbie problem
>>>
>>>public void create(Object object) throws Exception {
>>> Database db = null;
>>> try {
>>> db = getDatabase();
>>> db.begin();
>>> db.create(object);
>>> db.commit();
>>> }
>>> catch (Exception e) {
>>> db.rollback();
>>> throw e;
>>> }
>>> finally {
>>> close(db);
>>> }
>>> }
>>>
>>>When I call create(cForm); the java process goes to 99% and hangs
>>>
>>>
>>>
>>>
>>until
>>
>>
>>
>>
>>>I kill it. Is there some kind of logging I can turn on to see where
>>>
>>>
>>>
>>>
>>it
>>
>>
>>
>>
>>>is hanging?
>>>I am using castor-0.9.5.3.jar and classes12 from oracle 10g (thin
>>>client)
>>>
>>>Here is the mapping.
>>>
>>><key-generator name="SEQUENCE" alias="www_patient_comments_seq">
>>> <param name="sequence" value="www_patient_comments_seq"/>
>>> <param name="returning" value="true"/>
>>> </key-generator>
>>><!-- comments area -->
>>><class name="org.usiis.struts.CommentForm" identity="patCommentId"
>>>key-generator="www_patient_comments_seq">
>>> <!--<cache-type type="unlimited"/>-->
>>> <map-to table="WWW_PATIENT_COMMENTS"/>
>>> <field name="patCommentId" type="integer"><sql
>>>name="pat_comment_id" type="integer"/></field>
>>> <field name="usiisId" type="string"><sql name="usiis_id"
>>>type="integer"/></field>
>>> <field name="patientId" type="string"><sql name="patient_id"
>>>type="char"/></field>
>>> <field name="providerId" type="string"><sql
>>>
>>>
>>>
>>>
>>name="provider_id"
>>
>>
>>
>>
>>>type="char"/></field>
>>> <field name="date" type="date"><sql name="date_created"
>>>type="date"/></field>
>>> <field name="comment" type="string"><sql name="pat_comment"
>>>type="char"/></field>
>>> <field name="share" type="boolean"><sql name="share_flag"
>>>type="char[NY]"/></field>
>>></class>
>>>
>>>
>>>
>>>
>>>
>>>