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