我曾经使用 SDN 3.3.0 做了一个 POC。
目前,我正在尝试在 SDN 4.0.0.M1 上进行 POC。我能够创建一个正在运行的项目,其中查询数据库的存储库存在于应用程序端。但它的性能并不是那么好。
我正在尝试创建一个可以在服务器内作为插件运行的扩展。但这里的问题是 SDN API 在 3.3.0 和 4.0.0.M1 之间发生了很大变化。
我目前坚持在扩展中公开我的域对象。在 3.3.0 中,我们有 SpringPluginInitializer 可以用于相同但在 4.0 中找不到类似的东西。任何人都可以提供有关如何使用 SDN 4.0 配置插件的任何指示或教程吗?
PFB 域对象和存储库:
package org.neo4j.domain;
import org.neo4j.ogm.annotation.EndNode;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.RelationshipEntity;
import org.neo4j.ogm.annotation.StartNode;
@RelationshipEntity(type = "HAS_ADDRESS")
public class EmployeeToAddressRelationship {
@GraphId
private Long id;
@StartNode private Employee employee;
@EndNode private Address address;
//@RelationshipType private relationshipType;
public EmployeeToAddressRelationship()
{
super();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public Address getAddresss() {
return address;
}
public void setAddresss(Address address) {
this.address = address;
}
}
package org.neo4j.domain;
import org.springframework.data.annotation.TypeAlias;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
@NodeEntity
@TypeAlias("ADDRESS")
public class Address {
@GraphId
private Long id;
public String property1;
public String property2;
public String property3;
public String property4;
Address(){}
//getters and setters for all properties
}
package org.neo4j.repository;
import java.util.Map;
import org.neo4j.domain.Employee2Result;
import org.neo4j.domain.Address;
import org.neo4j.domain.Employee;
import org.neo4j.domain.EmployeeToAddressRelationship;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeRepository extends CrudRepository<Employee, String> {
@Query("MATCH p=(node1:NODE1)<-[rel1:REL1]-(node2:NODE2)<-[rel2:REL2]-(node3:NODE3)<-[rel3:REL3]-(node4:NODE4)<-[empRel:REL4]-(emp:EMPLOYEE) WHERE node1.property1={0} AND node2.property2={1} AND node3.property3={2} RETURN emp ORDER BY emp.timestamp DESC")
public Iterable<Employee> method1(String property1, String property2, String property3);
@Query("MATCH p=(node1:NODE1)<-[rel1:REL1]-(node2:NODE2)<-[rel2:REL2]-(node3:NODE3)<-[rel3:REL3]-(node4:NODE4)<-[empRel:REL4]-(emp:EMPLOYEE)-[addressRel:HAS_ADDRESS]->(address:ADDRESS) WHERE node1.property1={0} AND node2.property2={1} AND node3.property3={2} RETURN emp,addressRel,address ORDER BY emp.timestamp DESC")
public Iterable<Employee2Result> method2(String property1, String property2, String property3);
}
package org.neo4j.domain;
import java.util.Set;
import org.springframework.data.annotation.TypeAlias;
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
import org.neo4j.ogm.annotation.typeconversion.DateString;
import org.neo4j.ogm.annotation.typeconversion.NumberString;
@NodeEntity(label="EMPLOYEE")
public class Employee {
@GraphId
private Long id;
public String property1;
public String property2;
public String property3;
public String property4;
@Relationship(type = "HAS_ADDRESS", direction = Relationship.UNDIRECTED)
Set<Address> address;
public Searchspace()
{}
//getters and setters for all properties
}
package org.neo4j.domain;
import org.neo4j.ogm.annotation.ResultColumn;
import org.springframework.data.neo4j.annotation.QueryResult;
@QueryResult
public class Employee2Result {
@ResultColumn("emp")
Employee emp;
@ResultColumn("address")
Address address;
@ResultColumn("addressRel")
EmployeeToAddressRelationship addressRel;
//getters and setters for all properties
}
PS - 知道什么时候发布 SDN 4.0 GA 吗?
提前致谢,
拉胡尔