2017-10-02 6 views
0

回答で同様の質問がありますが、まだ文書が含まれている行を挿入できません。OrientDbに文書を挿入するには?

これを実現する方法はありますか?

OrientDBバージョン2.2.xでは以下の設定があります。

CREATE CLASS TranslatableText ABSTRACT; 
CREATE PROPERTY TranslatableText.de IF NOT EXISTS STRING; 
CREATE PROPERTY TranslatableText.en IF NOT EXISTS STRING; 

CREATE CLASS Product; 
CREATE PROPERTY Product.id IF NOT EXISTS INTEGER; 
CREATE PROPERTY Product.name IF NOT EXIST EMBEDDEDMAP TranslatableText; 

次に、次のINSERTステートメントを実行します。

INSERT INTO Product (id, name) VALUES (1, {"@type":"d", "@class": "TranslatableText", "de":"Auto", "en":"Car"}); 

そして、私は以下のようなエラーが出る:

com.orientechnologies.orient.core.exception.OValidationException: The field 'Car.name' has been declared as EMBEDDEDMAP but an incompatible type is used. Value: TranslatableText{en:Car} DB name="some_db" 

を注意:私は最初からすべてを入力したとして、あなたが構文で見ることができる小さなタイプミスを無視してください。構文エラーがないと仮定し、いくつかの同僚とこれらのすべてをチェックしました。

ありがとうございます!

答えて

1

あなたがEMBEDDEDMAP、一例でSETを使用する必要があります。

insert into Product SET id=1,name={"de":"Auto","en":"Car"} 
+0

でも同じエラーが発生します。私も非抽象的な定義なしで試した –

1

OK。私は、私たちの側に誤解があると考えました。 EMBEDDEDMAPは、スキームレスのキー値(json-like)ストレージを提供する複雑なデータ型です。

EMBEDDEDMAPに「クラス」検証を割り当てると、実際にはEMBEDDEDMAPの実際の使用法を侵害/乱用します。したがって、上記のエラーが発生します。

特定のスキームを持つ特定のドキュメントを格納する必要がある場合は、EMBEDDEDを使用します。

基本的には、

CREATE CLASS TranslatableText ABSTRACT; 
CREATE PROPERTY TranslatableText.de IF NOT EXISTS STRING; 
CREATE PROPERTY TranslatableText.en IF NOT EXISTS STRING; 

CREATE CLASS Product; 
CREATE PROPERTY Product.id IF NOT EXISTS INTEGER; 
CREATE PROPERTY Product.name IF NOT EXIST EMBEDDED TranslatableText; 

が正しい設定です。その後、文書化された表記を使用することができます。

+0

おしゃれなこと... –

関連する問題