Neo4J SDN 4 无法保存
Neo4J SDN 4 Unable to save
这是我的配置
@EnableTransactionManagement
@EnableScheduling
@EnableAutoConfiguration
@ComponentScan(basePackages = {"id.co.babe.neo4j.service"})
@Configuration
public class MyNeo4jConfiguration extends Neo4jConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(MyNeo4jConfiguration.class);
@Value("${neo4j.server.user}")
private String user;
@Value("${neo4j.server.pass}")
private String pass;
@Value("${neo4j.server.host}")
private String host;
@Override
public Neo4jServer neo4jServer() {
return new RemoteServer(host,user,pass);
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("app.neo4j.domain");
}
@Bean
@Primary
public Neo4jOperations getNeo4jTemplate() throws Exception {
return new Neo4jTemplate(getSession());
}
这是我的域用户
@NodeEntity
public class User{
@GraphId
private Long Id;
private String name;
private int age;
private String country;
和我的服务接口
public interface UserService {
public User create(User user);
public User read(User user);
public List<User> readAll();
public User update(User user);
public Boolean delete(User user);
}
和我的实现
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
Neo4jOperations template;
@Override
public User create(User user){
return template.save(user);
}
这是我的主要class
for(int i = 0; i < 10; i++){
app.neo4j.domain.User user = new app.neo4j.domain.User();
user.setAge(13);
user.setCountry("Philly");
user.setId(i);
user.setName("Ibanez" + i);
LOGGER.info("Inserting {}",user.getName());
service.create(user);
}
没有发现错误,但是当我转到 neo4j
控制台 (localhost:7474) 时,运行 此查询匹配 (n) return n,应该 return 数据库中的所有节点。不幸的是,即使我能够没有错误地保存,也没有找到节点。我想知道出了什么问题。
我也试过用 @enablingNeo4jRepositories
做,结果没有什么不同。
您的代码永远不应设置 @GraphId
字段的值。此字段在内部用于将实体附加到图形。
如果您删除 user.setId(i);
,您的实体应该会正确保存。
请注意,您可以添加自己的自定义 ID 字段,但您仍然需要为 GraphID 添加另一个字段,例如
@GraphId private Long graphId; //used internally, never assign a value
private Long id; //your application id, stored as a property on the entity
这是我的配置
@EnableTransactionManagement
@EnableScheduling
@EnableAutoConfiguration
@ComponentScan(basePackages = {"id.co.babe.neo4j.service"})
@Configuration
public class MyNeo4jConfiguration extends Neo4jConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(MyNeo4jConfiguration.class);
@Value("${neo4j.server.user}")
private String user;
@Value("${neo4j.server.pass}")
private String pass;
@Value("${neo4j.server.host}")
private String host;
@Override
public Neo4jServer neo4jServer() {
return new RemoteServer(host,user,pass);
}
@Override
public SessionFactory getSessionFactory() {
return new SessionFactory("app.neo4j.domain");
}
@Bean
@Primary
public Neo4jOperations getNeo4jTemplate() throws Exception {
return new Neo4jTemplate(getSession());
}
这是我的域用户
@NodeEntity
public class User{
@GraphId
private Long Id;
private String name;
private int age;
private String country;
和我的服务接口
public interface UserService {
public User create(User user);
public User read(User user);
public List<User> readAll();
public User update(User user);
public Boolean delete(User user);
}
和我的实现
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
Neo4jOperations template;
@Override
public User create(User user){
return template.save(user);
}
这是我的主要class
for(int i = 0; i < 10; i++){
app.neo4j.domain.User user = new app.neo4j.domain.User();
user.setAge(13);
user.setCountry("Philly");
user.setId(i);
user.setName("Ibanez" + i);
LOGGER.info("Inserting {}",user.getName());
service.create(user);
}
没有发现错误,但是当我转到 neo4j
控制台 (localhost:7474) 时,运行 此查询匹配 (n) return n,应该 return 数据库中的所有节点。不幸的是,即使我能够没有错误地保存,也没有找到节点。我想知道出了什么问题。
我也试过用 @enablingNeo4jRepositories
做,结果没有什么不同。
您的代码永远不应设置 @GraphId
字段的值。此字段在内部用于将实体附加到图形。
如果您删除 user.setId(i);
,您的实体应该会正确保存。
请注意,您可以添加自己的自定义 ID 字段,但您仍然需要为 GraphID 添加另一个字段,例如
@GraphId private Long graphId; //used internally, never assign a value
private Long id; //your application id, stored as a property on the entity