Hi guys,
I hope I'm doing something wrong and it's not a shortcoming for the
orientdb's functionality. I'm working on the application, which will need
to store different objects of complex structure (objects inside of
objects). For example, Person object may have Address object, Contacts, and
may need to link to some other objects, etc. Sometimes these objects may go
few levels deep. I created the class with an embedded class and it all
works good when I run query in the console. I have to use these extra
fields ("@type":"d", "@class":"Address") in the embedded object in order
for the query to understand the embedded object.
Here is example of a working query:
insert into Account (company, website, address) values ('Seller 0',
'http://www.seller0.com', {"@type":"d", "@class":"Address", "street":"1234
Sunset Dr.", "city":"Santa Monica", "state":"CA", "zip":"90046"})
The problem I"m running into, is that I will need to do this functionality
dynamically in Java and I have modeled my java classes to be exact as the
classes in the database, which makes sense to me and would save a lot of
time. However, when I serialize my Java object into JSON and create
ODocument object from this JSON, on save() the database is not taking it.
Here is example of one simple serialized java object:
json =
{
"account": "#25:0",
"meta": {
"created": "2016-10-03T21:10:21.77-07:00",
"ip": "0:0:0:0:0:0:0:1",
"contentType": "application/x-www-form-urlencoded",
"userAgent": "PostmanRuntime/2.5.2"
},
"data": "firstName=Jessica&lastName=Smith"
}
When I use this logic it fails:
*ODocument d = new ODocument("RawLead").fromJSON(json);*
*d.save(); *
I get Java error: Error: Error during saving of record with rid #-1:-1
For the above JSON I have the following "RawLead" class with embedded
"LeadMetadata" class:
CLASS 'RawLead'
PROPERTIES
+----+-------+--------+-----------------+---------+--------+--------+----+----+-------+-------+
|# |NAME |TYPE |LINKED-TYPE/CLASS|MANDATORY|READONLY|NOT-NULL|MIN
|MAX |COLLATE|DEFAULT|
+----+-------+--------+-----------------+---------+--------+--------+----+----+-------+-------+
|0 |data |STRING | |true |false |true | |
|default| |
|1 |meta |EMBEDDED|LeadMetadata |true |false |true | |
|default| |
|2 |account|LINK |Account |true |false |true | |
|default| |
+----+-------+--------+-----------------+---------+--------+--------+----+----+-------+-------+
CLASS 'LeadMetadata'
PROPERTIES
+----+-----------+--------+-----------------+---------+--------+--------+----+----+-------+---------+
|# |NAME |TYPE
|LINKED-TYPE/CLASS|MANDATORY|READONLY|NOT-NULL|MIN |MAX |COLLATE|DEFAULT |
+----+-----------+--------+-----------------+---------+--------+--------+----+----+-------+---------+
|0 |created |DATETIME| |false |true |false |
| |default|sysdate()|
|1 |ip |STRING | |true |false |true |7
|40 |default| |
|2 |userAgent |STRING | |true |false |true |1
|100 |default| |
|3 |contentType|STRING | |true |false |true |4
|50 |default| |
+----+-----------+--------+-----------------+---------+--------+--------+----+----+-------+---------+
I assume it's because I don't have the magic fields ("@type":"d",
"@class":"Meta") in my JSON. If this is correct, I need an advise on how to
go around it or maybe there is a different and more straight forward way of
doing it? I was hopping that I can simply serialize my exact Java objects
into JSON format then create ODocument and simply save it in the database.
That would be so awesome. Please help.
Thanks,
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.