0

tinkerpop.blueprints ライブラリの独自の Clojure バインディングを作成しようとしていますが、コミットの失敗と思われる障害に遭遇しました。現在、グラフの実装として Neo4j を使用しています。動作しない特定の機能は次のとおりです。

(defn remove-from-index!
  ([index-name elm key]
    (remove-from-index!
      index-name elm key (property elm key)))
  ([index-name elm key val]
    (let [idx (index index-name)]
      (tx
        (-> idx
          (.remove (name key) val elm)))
      idx)))

次のように使用します。

(remove-from-index! :users v1 :username)
(remove-from-index! :users v2 :username "foo")

正常に動作しているようですが、インデックスをクエリすると、削除しようとした頂点が削除されません。私はそれを少しずつ分解しようとしましたが、実際は削除されていると判断しましたが、呼び出されるとすぐに.commitすべてがロールバックされます.

関連する他の機能/マクロ:

(defn property
  [elm key]
  (-> elm (.getProperty (name key))))

(defmacro tx
  [& body]
  `(try
    (let [val# (do ~@body)]
      (.commit *g*)
      val#)
    (catch Exception e#
      (println (.getMessage e#))
      (.rollback *g*))))

(defn index
  ([^String nomen]
    (index (name nomen) "Vertex"))
  ([^String nomen ^String type]
    (-> *g*
      (.getIndex
        (name nomen)
        (Class/forName (str "com.tinkerpop.blueprints." type))))))
4

0 に答える 0