Estou usando o Spring Data Neo4j para trabalhar com meu banco de dados Neo4j. Meu aplicativo inclui uma entidade de nó Variation que tem um relacionamento com um enum chamado Type. Aqui está uma versão simplificada do meu código:
@Node
public class Variation extends BaseEntity {
private String title;
@Relationship(type = "HAS_ATTRIBUTE", direction = Relationship.Direction.OUTGOING)
private Type type;
// Other fields and relationships...
}
@Node
public enum Type {
CUSTOM(0),
FIX(1),
// Other constants...
@Id
private final int id;
Type(int id) {
this.id = id;
}
}
Aqui estão minhas build.gradle
dependências:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-neo4j'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
Também estou usando um VariationService para criar nós e relacionamentos. O findAll
método no VariationRepository falha com o seguinte erro:
java.lang.IllegalStateException: Required property $enum$name not found for class org.com.example.node.Type
at org.springframework.data.mapping.PersistentEntity.getRequiredPersistentProperty
...
O erro parece indicar um problema com o mapeamento do tipo enum.
Minha pergunta é:
- Como posso configurar o Spring Data Neo4j para mapear corretamente enumerações como Type como nós?
- Existe uma maneira específica de manipular propriedades enum no Neo4j ao usar Spring Data?
@Node
é suposto ser usado para anotar uma classe que representa nós no banco de dados, com cada nó representável como uma instância separada dessa classe. Como umenum
contém apenas um conjunto fixo de valores constantes (e você não pode criar instâncias diferentes em umaenum
classe), não faz sentido tratar umenum
como um nó.Para corrigir seu código, você pode simplesmente remover a
@Node
anotação doenum
, e remover a anotação @Relationship também. Isso armazenaria diretamente otype
como uma propriedade de cadaVariation
nó. E, se necessário, você pode otimizar a localização de todos osVariation
nós de qualquer dadotype
criando um índice na combinaçãoVariation
andtype
.