3

私は Datomic サンプル スキーマに従っていましたが、次のように定義されたエンティティの ID があります。

:db/id #db/id[:db.part/db]

#db/idの意味は何ですか? スキーマには read-string がロードされているので、有効な Clojure 構文だと思います。

4

2 に答える 2

1

Jouni そうです、それは読者リテラルです。

より具体的には、リーダー リテラル#db/id[:db.part/db]は、 :db.part/dbパーティション内に一時的なエンティティ ID を作成します。

この一時 ID は、トランザクションを構築するときに使用できます。トランザクションがデータベースに正常に適用される (つまり、「トランザクションが実行される」) 場合、一時 ID はデータベース内の永続的なエンティティ ID に置き換えられます。

この特定のリーダー リテラルの一般的な形式は#db/id[partition-name value*]です。ここで、value はオプションの負の値であり、一時 ID を単一のトランザクション内で一意かつ確定的に区別できるようにします。

これは非常に便利です。#db/id[:db.part/user -300]は、特定のトランザクション内のいくつかの場所で、まだ作成されていない同じエンティティを参照するために使用できます。

于 2013-02-12T14:42:58.867 に答える