我对neo的弹簧数据相当新(虽然我有neo4j本身的经验)。我尝试按照关于neo的弹簧数据的“官方”指南,特别是关于creating relationships的章节。
但似乎我无法让它发挥作用。春天给了我一个
java.lang.IllegalStateException: This index (Index[__rel_types__,Relationship]) has been marked as deleted in this transaction
让我强调,我不会删除任何节点或关系。这些是我的域模型的相关类:
@NodeEntity
public class User {
@GraphId
private Long nodeid;
@Indexed(unique = true)
private String uuid;
....
}
@NodeEntity
public class Website {
@GraphId
private Long nodeid;
@Indexed(unique = true)
private String uuid;
....
}
@RelationshipEntity(type = RelTypes.REL_USER_INTERESTED_IN)
public class UserInterest {
@GraphId
private Long nodeid;
@StartNode
private User user;
@EndNode
private Website site;
...
}
这是我的基本测试,我无法变绿.. (请注意,我省略了大部分代码,弹簧上下文等的基本设置工作正常)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@Transactional
public class BaseTest {
@Autowired
protected Neo4jTemplate template;
@Autowired
protected GraphDatabaseService graphDatabaseService;
protected Transaction tx;
@Configuration
@EnableNeo4jRepositories
static class TestConfig extends Neo4jConfiguration {
TestConfig() throws ClassNotFoundException {
setBasePackage("me.bcfh.model");
}
@Bean
GraphDatabaseService graphDatabaseService() {
return new TestGraphDatabaseFactory().newImpermanentDatabase();
}
}
public void before() {
// provide implementation if necessary
}
public void after() {
// provide implementation if necessary
}
@Before
public void setup() throws Exception {
Neo4jHelper.cleanDb(graphDatabaseService, false);
before();
}
@After
public void tearDown() throws Exception {
after();
if (tx != null) {
tx.success();
tx.close();
tx = null;
}
}
}
public class BasicGraphTest extends BaseTest {
User user;
Website website;
UserInterest interest;
@Override
public void before() {
user = new User();
website = new Website();
website = template.save(website);
user = template.save(user);
}
@Test
@Transactional
public void dbShouldContainData() throws Exception {
UserInterest interest = new UserInterest();
interest.setSite(website);
interest.setUser(user);
template.save(interest);
// some assertions
...
}
}
当我尝试持久化UserInterest实例时会抛出IllegalStateException,我不明白,因为我没有删除任何地方。
春季指南中提到的建立关系的方式对我来说也不起作用,在这里我得到了同样的例外......
有谁能发现我在这里做错了什么?
我正在使用Spring版本4.1.4.RELEASE和Spring Data for Neo Version 3.2.1.RELEASE。 Neo4j的版本为2.1.6
注意:我也尝试将域模型类从cineasts示例复制到我的项目中,并借用了几行DomainTest类,但这也给了我IllegalStateException,可能我的设置有问题?
答案 0 :(得分:2)
我认为你得到了IllegalStateException,因为你在setup方法中调用了cleanDb。
您可能不需要清理数据库。由于你的测试是maTrared @Transactional,你在测试中所做的任何事情都会在测试结束时回滚。
看起来事务正在尝试回滚,但找不到它期望的关系。