是否可以在接口或抽象类或其字段上添加@NodeEntity(甚至@RelationshipEntity)注释?SpringData Neo4j如果没有,您如何处理这些情况?
我有一个简单的图形模型:1 User有N SocialUser。
我想知道当我删除实体时是否有任何方法spring-data-neo4j可以自动删除所有引用的内容。SocialUserUser
这是我到目前为止所得到的:
领域:
@NodeEntity
public class User implements IdentifiableEntity<String> {
@GraphId
private Long nodeId;
// ...
@RelatedTo(type = "HAS", direction = Direction.OUTGOING)
Set<SocialUser> socialUsers = new HashSet<>();
}
@NodeEntity
public class SocialUser implements BasicNodeEntity {
@GraphId
private Long nodeId;
//...
@RelatedTo(type = "HAS", direction = Direction.INCOMING)
User user;
}
Run Code Online (Sandbox Code Playgroud)
数据:

我尝试过的:
在这两种情况下,仅User删除:

目前,我已将两个实体的删除封装在服务@Transactional的方法中User。像这样的东西:
@Autowired
Neo4jOperations template;
@Transactional
public …Run Code Online (Sandbox Code Playgroud) 让我们有这个类结构:
@NodeEntity
abstract class BasicNodeEntity {
@GraphId
private Long nodeId;
//...
}
abstract class IdentifiableEntity extends BasicNodeEntity {
private String id;
//...
}
abstract class Ad extends IdentifiableEntity {
//... Ad attibutes
}
class OfferAd extends Ad {
// ... OfferAd attibutes
}
Run Code Online (Sandbox Code Playgroud)
OfferAd通过a 保存节点Neo4jRepository,我希望节点有两个标签:OfferAd和Ad(继承).但是,标签Ad未添加到节点.
我知道我可以通过密码查询来保存节点,但是我想知道它是否可以通过代码Neo4jRepository来实现.
我已经回顾了这个问题(与SDN3相关),我认为它与我的用例非常接近,但它似乎无法正常工作......
任何帮助,将不胜感激.谢谢
java neo4j spring-data spring-data-neo4j spring-data-neo4j-4
我需要将数字属性的类型迁移为字符串类型。为此,我编写了以下简单的查询:
MATCH (n:Entity) SET n.id=toString(n.id) RETURN n
Run Code Online (Sandbox Code Playgroud)
它匹配了大约 120 万个实体(根据 EXPLAIN),所以我没想到它会这么快。但5个多小时后仍未结束。与此同时,neo4j 服务器(社区,3.0.4)以接近 100% 的负载运行。
我在相应的 neo4j.conf 中进行了配置:
dbms.memory.heap.initial_size=4g
dbms.memory.heap.max_size=4g
dbms.jvm.additional=-XX:+UseG1GC
Run Code Online (Sandbox Code Playgroud)
仅运行几分钟后,我就可以在日志中看到有关 GarbageCollection 的报告:
[o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 277ms.
Run Code Online (Sandbox Code Playgroud)
后来情况变得更糟:
[o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 53899ms.
Run Code Online (Sandbox Code Playgroud)
最终出现了以下内容:
[o.n.b.v.r.i.c.SessionWorker] Worker for session '10774fef-eed2-4593-9a20-732d9103e576' crashed: Java heap space Java heap space
java.lang.OutOfMemoryError: Java heap space
[o.n.b.v.r.i.c.SessionWorker] Fatal, worker for session '10774fef-eed2-4593-9a20-732d9103e576' crashed. Please contact your support representative if you are unable to resolve this. Java heap space java.lang.OutOfMemoryError: …Run Code Online (Sandbox Code Playgroud) 我正在试验/学习弹簧数据neo4j.我有一个非常简单的应用程序存储来自Twitter的推文.请参阅下面的代码段.
@NodeEntity
public class Tweet {
@GraphId
private Long id;
private String tweet;
@Indexed
Set<String> hashtags;
Run Code Online (Sandbox Code Playgroud)
问题是,存储哈希标记的最佳方法是什么,以便我可以快速获取它们所属的推文?我能想到的是在Set上使用@Indexed或实际创建一个单独的Hashtag NodeEntity并在它和tweet之间建立关系.我无法找到一个NodeEntity索引集的任何文件,所以我不知道,如果设置的对象或设置每个字符串索引的创建索引.任何建议都会很好.谢谢.
这是一个大学项目.教授告诉我们需要将neo4j用于图形数据库,由于POJO不能作为节点存储在neo4j中,我们也需要使用spring数据.听起来不错.当我真正编写代码时,我遇到的教程就是我的头脑.示例代码使用了注释,xml,bean和诸如此类的东西,而没有任何解释它们来自何处.我认为它们都是我没有经验的弹簧框架的一部分.那么在考虑春天neo4j之前我需要学习多少春天?我不能向我的教授寻求帮助,因为他是管理类型的人,他知道像技术这样的所有单词,但不知道它们是如何工作的.
我一直在使用4.1.0-BUILD-SNAPSHOT中的最新代码,因为我需要4.1分支中的一些新bug修复,只是注意到"neo4jServer()"不再是Neo4jConfiguration公开的方法.初始化服务器连接和单元测试的内存中版本的新方法是什么?在我分别使用"RemoteServer"和"InProcessServer"之前.
Spring org.springframework.transaction.annotation.Transactional注释和Neo4j OGM org.neo4j.ogm.session.Session.getTransaction()方法之间的相关性是什么?
我正在尝试通过session.getTransaction()Spring注释的方法内部访问当前事务@Transactional但始终为null.
我在Spring MVC RestController方法中添加了以下代码:
Transaction tx = session.beginTransaction();
try {
for (int i = 0; i < 10; i++) {
initializeNode(node);
}
}
tx.commit();
} catch (Throwable th) {
logger.error("Error while inserting mock data", th);
th.printStackTrace();
} finally {
tx.close();
}
Run Code Online (Sandbox Code Playgroud)
在以下方法的情况下:
private void initializeNode(TestNode node) {
System.out.println(session.getTransaction());
}
Run Code Online (Sandbox Code Playgroud)
它打印当前的tx - 到目前为止一切都还可以.
但是在以下方法的情况下:
private void initializeNode(TestNode node) {
System.out.println(session.getTransaction());
User admin = userDao.findByUsername("admin");
}
Run Code Online (Sandbox Code Playgroud)
第一次打印当前tx然后null ...事务在提交之前由于某种原因消失..
这是findByUsername方法:
@Service …Run Code Online (Sandbox Code Playgroud) neo4j spring-transactions spring-data-neo4j spring-data-neo4j-4 neo4j-ogm
我想用最新的spring-data neo4j 4来测试插入速度.我修改了电影示例,使事情变得简单和可比.
尝试运行测试类:movies.spring.data.neo4j.repositories.PersonRepositoryTest.
在此示例中,添加400个节点需要5秒. https://github.com/fodon/neo4j-spring-data-speed-demo
这是使用旧版neo4j的速度测试 https://github.com/fodon/gs-accessing-data-neo4j-speed
对于同一个作业,hello.Application类比spring-data-neo4j-4快约40倍.
为什么spring-data-neo4j-4比旧版本慢?如何加快速度?
我有一个Spring Data Neo4j应用程序需要对Neo4j Community Edition(3.2)进行批量数据写入/读取.
我的系统配置(Macbook pro)16GB RAM,2.5 GHz Intel Core i7.
总节点:120,000.(每个节点有5个属性.)
我每个节点有500个关系.
上面的节点/关系是我需要的其他应用程序部分工作所需的初始数据的一部分.
我使用Spring Data Neo4j进行读/写事务.每个节点按顺序构建其对应的500个关系.显然,构建所有上述节点和关系需要花费大量时间.
示例代码:
实体:
//Neo4j entity class
import org.neo4j.ogm.annotation.GraphId;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Relationship;
@NodeEntity
public class SamplePojo {
@GraphId
public Long id;
private String property1;
private String property2;
private Integer property3;
private Double property4;
private Integer property5;
@Relationship(type="has_sample_relationship",direction="OUTGOING")
List<SamplePojo> sampleList = new ArrayList<>();
//Getters and setters...
}
Run Code Online (Sandbox Code Playgroud)
库:
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
@Repository
public interface SamplePojoRepository extends GraphRepository<SamplePojo> …Run Code Online (Sandbox Code Playgroud)