Spring boot Neo4j Spring Boot只能将一些实体绑定到数据库,;不是全部
我在项目中使用neo4j spring boot,我注意到只有一些实体绑定到neo4j数据库。例如,我有line和site类:Spring boot Neo4j Spring Boot只能将一些实体绑定到数据库,;不是全部,spring-boot,neo4j,Spring Boot,Neo4j,我在项目中使用neo4j spring boot,我注意到只有一些实体绑定到neo4j数据库。例如,我有line和site类: @NodeEntity(label = "Line") public class Line { @Id @GeneratedValue private Long lineid; private String lineserial; private float linelength; private String line
@NodeEntity(label = "Line")
public class Line {
@Id
@GeneratedValue
private Long lineid;
private String lineserial;
private float linelength;
private String linename;
public Line() {
}
public Line(String lineserial, String linename, float linelength) {
this.lineserial = lineserial;
this.linelength = linelength;
this.linename = linename;
}
public Long getLineId() {
return lineid;
}
public void setLineId(Long lineid) {
this.lineid = lineid;
}
public String getLineSerial() {
return lineserial;
}
public void setLineSerial(String lineserial) {
this.lineserial = lineserial;
}
public float getLength() {
return linelength;
}
public void setLineLength(int linelength) {
this.linelength = linelength;
}
public String getLineName() {
return linename;
}
public void setLineName(String linename) {
this.linename = linename;
}
@Relationship(type = "Connect_To", direction = Relationship.OUTGOING)
private List<Site> cSites;
public List<Site> getSites() {
return cSites;
}
public void addConnectSite(Site site) {
if (this.cSites == null) {
this.cSites = new ArrayList<>();
}
this.cSites.add(site);
}
@Relationship(type = "Cross_With", direction = Relationship.UNDIRECTED)
private List<Line> cLines;
public List<Line> getLines() {
return cLines;
}
public void addCrossLine(Line line) {
if (this.cLines == null) {
this.cLines = new ArrayList<>();
}
this.cLines.add(line);
}
}
@NodeEntity(label = "Site")
public class Site {
@Id
@GeneratedValue
private long siteid;
private String sitename;
public Site() {
}
public Site(String sitename) {
this.sitename = sitename;
}
public long getSiteId() {
return siteid;
}
public void setSiteId(Long siteid) {
this.siteid = siteid;
}
public String getSiteName() {
return sitename;
}
public void setSiteName(String name) {
this.sitename = name;
}
}
我注意到spring使用了CREATE,而sites使用了MATCH。然而,它们都使用了Neo4jRepository的save功能
如果有人能告诉我原因,那将非常有帮助。解决问题所需的代码更改- 1) 关系方向Neo4j支持单向 此时保持节点到节点关系时的关系。 除此之外,它还允许在发生冲突时建立无向关系 查找 需要更新:
@Relationship(type=“Cross_-With”,direction=Relationship.UNDIRECTED)
到关系。传出的
或关系。传入的
参考:
2) Neo4j spring数据支持自动生成包装器类型的Id
- 长的
- 串
需要更新:
私有长站点ID代码>而不是
私有长站点ID代码>
私有长站点ID代码>?使用它更改访问器和变异器。
@Repository
public interface LineRepository extends Neo4jRepository<Line, Long> {
Line findByLineserial(@Param("lineserial") String lineserial);
Collection<Line> findByLinenameLike(@Param("linename") String linename);
@Query("MATCH (l:Line)-[r:Connect_To]->(S:Site) RETURN l,r,s LIMIT {limit}")
Collection<Line> graphConnectToSite(@Param("limit") int limit);
@Query("MATCH (11:Site)-[r:Cross_With]-(lr:Line) RETURN ll,r,lr LIMIT {limit}")
Collection<Line> graphCrossWithLine(@Param("limit") int limit);
}
@Repository
public interface SiteRepository extends Neo4jRepository<Site, Long> {
Site findBySitename(@Param("sitename") String sitename);
}
@Service
public class LineService {
private final static Logger LOG = LoggerFactory.getLogger(LineService.class);
@Autowired
private LineRepository lineRepository;
@Transactional(readOnly = true)
public Line findByTitle(String serial_number) {
Line result = lineRepository.findByLineserial(serial_number);
return result;
}
@Transactional(readOnly = true)
public Collection<Line> findByLineNameLike(String name) {
Collection<Line> result = lineRepository.findByLinenameLike(name);
return result;
}
@Transactional
public Line SaveLine(String serial_number, String line_name, float length) {
if (lineRepository.findByLineserial(serial_number) != null) {
return null;
}
Line line = new Line(serial_number, line_name, length);
return lineRepository.save(line);
}
}
@Service
public class SiteService {
private final static Logger LOG = LoggerFactory.getLogger(SiteService.class);
@Autowired
private SiteRepository siteRepository;
@Transactional(readOnly = true)
public Site findBySiteName(String site_name) {
Site result = siteRepository.findBySitename(site_name);
return result;
}
@Transactional
public Site SaveSite(String site_name) {
if (siteRepository.findBySitename(site_name) != null) {
System.out.print(site_name + "is already exist");
return null;
}
Site site = new Site(site_name);
//System.out.print(site_name+ siteRepository.save(site).getSiteId() + "is added successfully");
Site result = siteRepository.save(site);
return result;
}
}
2019-11-06 17:19:33.147 INFO 2848 --- [nio-8080-exec-3] o.n.o.drivers.bolt.request.BoltRequest : Request: MATCH (n:`Site`) WHERE n.`sitename` = { `sitename_0` } WITH n RETURN n, ID(n) with params {sitename_0=site1}
2019-11-06 17:19:33.159 INFO 2848 --- [nio-8080-exec-3] o.n.o.drivers.bolt.request.BoltRequest : Request: UNWIND {rows} as row MATCH (n) WHERE ID(n)=row.nodeId SET n:`Site` SET n += row.props RETURN row.nodeId as ref, ID(n) as id, {type} as type with params {type=node, rows=[{nodeId=0, props={sitename=site1}}]}
2019-11-06 17:24:10.949 INFO 2848 --- [nio-8080-exec-9] o.n.o.drivers.bolt.request.BoltRequest : Request: MATCH (n:`Line`) WHERE n.`lineserial` = { `lineserial_0` } WITH n RETURN n,[ [ (n)-[r_c1:`Connect_To`]->(s1:`Site`) | [ r_c1, s1 ] ], [ (n)-[r_c1:`Cross_With`]-(l1:`Line`) | [ r_c1, l1 ] ] ], ID(n) with params {lineserial_0=1254}
2019-11-06 17:24:10.954 INFO 2848 --- [nio-8080-exec-9] o.n.o.drivers.bolt.request.BoltRequest : Request: UNWIND {rows} as row CREATE (n:`Line`) SET n=row.props RETURN row.nodeRef as ref, ID(n) as id, {type} as type with params {type=node, rows=[{nodeRef=-11, props={linelength=11.2, linename=ABAB, lineserial=1254}}]}