[RESOLVIDO] neo4j - Nó de referência

4 respostas
Marcelo_Tozzi

Estava olhando o exemplo do Neo4j no Github http://migre.me/42KWv do @Porcelli e vi o método getArvoreCompleta(Node pai).

Tentei buscar o nó de referência (GraphDatabaseService.getReferenceNode()) mas não consegui, o único jeito foi pegar pelo GraphDatabaseService.getNodeById(1), mas assim teria q gravar o nó inicial em algum outro lugar.

Estou fazendo um teste baseado em Seriado, Temporada e Episódio.

DÚVIDA: Queria saber como buscar a árvore completa sem ter o nó pai, carregar o primeiro nó de referência que apontaria para um/os seriado/s. Não sei se tenho que definir um nó “pai de todos” antes de inserir os seriados e etc.

E se alguém souber como buscar nós pelas propriedades já adiantaria o meu lado também!(Ex: buscar um seriado por nome).
Vi que existe o Spring-Data que ajuda a usar o neo4j também mas não cheguei a estudar ele ainda.

4 Respostas

Marcelo_Tozzi

Potz, é obvio. O nó de referência tem que saber quais seriados ele deve conhecer.

Eu estava inserindo assim:
public Seriado criaSeriado(String titulo, String ano) {
		Transaction tx = graphDbService.beginTx();
		try {
			Node novoSeriado = graphDbService.createNode();
			Seriado seriado = new Seriado(novoSeriado);

			seriado.setTitulo(titulo);
			seriado.setAno(ano);
			tx.success();
			return seriado;
		} finally {
			tx.finish();
		}
	}
e na hora de buscar?
public List<Node> getArvoreCompleta() {
		Transaction tx = graphDbService.beginTx();
		List<Node> resultado = new LinkedList<Node>();

		try {
			//??????? FUUUUUUUU
				
			tx.success();
			return resultado;
		} finally {
			tx.finish();
		}
	}
Quando inserir devo dizer ao nó de referência o que ele deve conhecer:
public Seriado criaSeriado(String titulo, String ano) {
		Transaction tx = graphDbService.beginTx();
		try {
			//Pego o no de referência
			Node referencia = this.graphDbService.getReferenceNode();
			Node novoSeriado = graphDbService.createNode();
			Seriado seriado = new Seriado(novoSeriado);

			seriado.setTitulo(titulo);
			seriado.setAno(ano);	
			
			if (referencia != null) {
				//relaciono o meu seriado com o nó de referência
				referencia.createRelationshipTo(novoSeriado,TipoDeRelacionamento.PAI);
			}
			tx.success();
			return seriado;
		} finally {
			tx.finish();
		}
	}
e na hora de buscar seria assim:
public List<Node> getArvoreCompleta() {
		Transaction tx = graphDbService.beginTx();
		List<Node> resultado = new LinkedList<Node>();

		try {
			//pego o no de referência pra ser usado como  pai
			Node referencia = this.graphDbService.getReferenceNode();
				
			Traverser traverser = referencia.traverse(Order.BREADTH_FIRST,
					StopEvaluator.END_OF_GRAPH,
					ReturnableEvaluator.ALL_BUT_START_NODE,
					TipoDeRelacionamento.PAI, Direction.OUTGOING);

			for (Node node : traverser) {
				resultado.add(node);
			}
				
			tx.success();
			return resultado;
		} finally {
			tx.finish();
		}
	}
Adriano_Almeida

Oi Marcelo, blz?

Isso que vc postou na ultima deve resolver. Anyway, alem do spring data, tem tbm o jo4neo http://code.google.com/p/jo4neo/. Eu particularmente, prefiro usar a API crua direto. Ela eh bem poderosa, mas um pouco excessiva em statics.

Marcelo_Tozzi

Blz velhinho. Vou dar uma olhada! Valeu!

juniorsatanas

Adriano Quando sai o livro ?

Criado 14 de março de 2011
Ultima resposta 16 de fev. de 2013
Respostas 4
Participantes 3