Hi Appian,
I have a use case to create a CDT for an oracle table. The id is configured as below, I am trying to create CDT with not specifying the sequence using JPA Annotation @GeneratedValue ( please find example 1 XML) when I do this the datastore doesn't publish. When I tried to publish my CDT with Example 2 CDT then write to db calls fail with error : ids for this class must be manually assigned before calling save().Curious to know if we can create a CDT with no sequence and make the inserts work from Appian ?
Oracle Code for ID:
"ID" NUMBER(38,0) GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE,
Example 1 XML:
<xsd:element name="id" nillable="true" type="xsd:int"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Id @GeneratedValue @Column(name="ID", nullable=true, columnDefinition="NUMBER")</xsd:appinfo> </xsd:annotation> </xsd:element>
Example 2 XML:
<xsd:appinfo source="appian.jpa">@Id @Column(name="ID", nullable=false, columnDefinition="NUMBER")</xsd:appinfo>
Discussion posts and replies are publicly visible
My immediate first question is why do you want to avoid @GeneratedValue? How else is the XSD supposed to understand that your Oracle code will supply the ID?
Are you doing that because Example 1 won't publish? Why not the more general question: "Why won't example 1 publish?"? It might have nothing to do with the sequence. The first thing I would check is nullable being true. Is that correct?
Hi Dave, when I put in @GeneratedValue the cdt publish is erroring out, I tried nillable="false" but that doesn't work either.
Error received : data source schema does not match the type mappings: Missing sequence or table: Table_sq
XML :
<xsd:element name="id" nillable="false" type="xsd:int"> <xsd:annotation> <xsd:appinfo source="appian.jpa">@Id @GeneratedValue @Column(name="ID", nullable=false, columnDefinition="NUMBER")</xsd:appinfo> </xsd:annotation> </xsd:element>
Check this documentation which specifies to select sequence for Oracle database.
Have you tried using SQL INTEGER? That may be the problem right there, because NUMBER allows you to specify the number of digits after decimal point. I wonder if it only maps to Decimal, and doesn't properly map to XSD int.
I see there is no integer type in oracle Dave.So I am stuck.
What version of Oracle are you using? The INTEGER keyword should work.
I mean I tried to create a table with integer and the table gets created with datatype as number(38,0) . Isn't interger and number with 0 decimal point are the same datatypes. Do you think there is a difference?
HI Abhishek,
Try creating table in oracle with a sequence (you might have to create a sequence i will be easy if you are using any oracle sql developer) . try inputting the data with sql insert query, if it work fine , then create the cdt from the DB. It will work .
Hi Manish,
Thanks for the input, I am aware of this approach but we are trying to emulate how auto increment cdts creation work for mysql tables. Auto increment works with mysql and even oracle supports that capability but only when I create a CDT to link a table created in oracle, system wouldn't allow me to publish without providing a sequence. We are trying to create table with autogenerated ids and pass null from appian and db handles the job of creating id value, there by eliminating the dependency of linking sequences and maintaining them.