Согласно https://docs.spring.io/spring-data/neo4j/docs/4.0.0.M1/reference/html/#__relationship_connecting_node_entities я хочу сохранить узлы, имеющие отношение 1: 1, к другому сложному узлу.Используемая версия Neo4j: 3.2.6
Следующий вариант использования:
- Для загруженных файлов конкретная информация об этих файлах сохраняется в Neo4j как единое целое
FileHashEntity
- Пользователи, которые загружают файлы, представлены в Neo4j как пользовательские объекты:
BaseUserEntity
и UserEntity
FileHashEntity
связаны с пользователем, который изначально загрузил файл в первый раз
Классы Java, которые определяют объекты пользователя, объявляются следующим образом:
@NodeEntity
public abstract class BaseUserEntity {
@GeneratedValue
@Id
private Long id;
...
}
public class UserEntity extends BaseUserEntity {
@Id
private String email;
private String passwordHash;
...
}
И сущность для информации о файле выглядит следующим образом:
@NodeEntity
public class FileHashEntity {
@DateLong
private Date creationTime;
@Id
private String sha256;
...
private long size;
@Relationship(type = "UPLOADED_BY", direction = Relationship.OUTGOING)
private UserEntity uploader;
...
}
Если я пытаюсь сохранитьFileHashEntity
Я получаю сообщение об ошибке из-за свойства сложного объекта (UserEntity
):
public interface FileHashRepository extends Neo4jRepository<FileHashEntity, String> {
@Query(value = "merge (n:FileHashEntity {sha256: {0}}) on create set n = {1} return n")
FileHashEntity storeIfNotExists(String sha256, FileHashEntity entity);
...
}
Caused by: org.neo4j.driver.v1.exceptions.ClientException: Property values can only be of primitive types or arrays thereof
at org.neo4j.driver.internal.net.SocketResponseHandler.handleFailureMessage(SocketResponseHandler.java:76)
Но в документации Spring говорится, что это возможно даже без явной аннотации @Relationship
(см. ссылку выше).).Я даже пытался заменить тип объявления UserEntity
на BaseUserEntity
.Что не так?