Inserção no banco com JPA

8 respostas
M

Olá pessoal estou tentando realizar a inserção de um relacionamento ManyToMany mas só tenho como volta esse “erro”:

Usage: RealmBase -a <algorithm> [-e <encoding>] <credentials>

Entidades envolvidas:

Entidade Dog:

@Entity
public class Dog {
	
	@Id
	@GeneratedValue
	private Integer id;
	
	@ManyToMany(mappedBy="dogs")
	private List<Person> person;
	
	private String name;

	public List<Person> getPerson() {
		return person;
	}

	public void setPerson(List<Person> person) {
		this.person = person;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	

}

Entidade Person dona do relacionamento:

@Entity
public class Person {

	@Id
	@GeneratedValue
	private Integer id;
	
	private String name;
	
	@ManyToMany
	@JoinTable(
			name="person_dog", 
			joinColumns=@JoinColumn(name="person_id"), 
			inverseJoinColumns = @JoinColumn(name="dog_id") )
	private List<Dog> dogs;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Dog> getDogs() {
		return dogs;
	}

	public void setDogs(List<Dog> dogs) {
		this.dogs = dogs;
	}
}

método main:

package mapeamento.manytomany;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class main {
	
	public static List<Person> getPersonList(){
		
		List<Person> personList = new ArrayList<>();
		
		Person person1 = new Person();
		person1.setName("testePerson1");		
		person1.setDogs(getDogList());
		
		Person person2 = new Person();
		person2.setName("testePerson2");		
		person2.setDogs(getDogList());
		
		personList.add(person1);
		personList.add(person2);
		
		return personList;
	}
	
	public static List<Dog> getDogList(){
		
		List<Dog> dogList = new ArrayList<>();
		
		Dog dog1 = new Dog();
		dog1.setName("testeDog1");
		dog1.setPerson(getPersonList());
		
		Dog dog2 = new Dog();
		dog2.setName("testeDog2");
		dog2.setPerson(getPersonList());
		
		dogList.add(dog1);
		dogList.add(dog2);
		return dogList;
	}
	
	public static void main(String []args){
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("testeHibernate");
		EntityManager em = emf.createEntityManager();
		
		try {
			em.getTransaction().begin();
			
			Person person = new Person();
			person.setName("Person");
		    person.setDogs(getDogList());
			
			em.persist(person);
			
			em.getTransaction().commit();
			
			System.out.println("terminou transição");
			
		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			em.close();
		}
		
	}

}

O erro não pode estar no persistence.xml pois um outro teste no mesmo projeto funcionou perfeitamente. OBS: o outro era OneToMany.

8 Respostas

Hebert_Coelho

Na entidade Pessoa, coloque o ManyToMany dogs para cascade do tipo persist.

M

@ManyToMany(cascade = CascadeType.PERSIST)

Então velho ja tentei dessa forma e da outra que havia postado.

Hebert_Coelho

Mathe:
@ManyToMany(cascade = CascadeType.PERSIST)

Então velho ja tentei dessa forma e da outra que havia postado.

Posta o erro completo por favor.

Hebert_Coelho

Mathe:
@ManyToMany(cascade = CascadeType.PERSIST)

Então velho ja tentei dessa forma e da outra que havia postado.

Eu acho que seu problema pode estar que no método getDogList você faz para cada Dog um dog.setPersons.

Os cachorros tem que apontar para a pessoa que está sendo feito o persist.

M

Mals a demora da resposta, bem o erro completo é o seguinte:
Usage: RealmBase -a [-e ]

Só isso mesmo.

Hmm, então eu mudei quase tudo, tirei os métodos, fiz tudo bem mais simples, só envolvi o objeto pessoa que vai ser persistido, seria isso?

public class main {
	
	public static void main(String []args){
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("testeHibernate");
		EntityManager em = emf.createEntityManager();
		
		try {
			em.getTransaction().begin();
			
			List<Dog> dogs = new ArrayList<>();
			
			Dog dog = new Dog();
			dog.setName("cachorro");
			
			Person person = new Person();
			person.setName("Person");
		    person.setDogs(dogs);
			
			em.persist(person);
			
			em.getTransaction().commit();
			
			System.out.println("terminou transição");
			
		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			em.close();
		}
		
	}

}
Hebert_Coelho
Mathe:
Hmm, então eu mudei quase tudo, tirei os métodos, fiz tudo bem mais simples, só envolvi o objeto pessoa que vai ser persistido, seria isso?
public class main {
	
	public static void main(String []args){
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("testeHibernate");
		EntityManager em = emf.createEntityManager();
		
		try {
			em.getTransaction().begin();
			
			List<Dog> dogs = new ArrayList<>();
			
			Dog dog = new Dog();
			dog.setName("cachorro");
			
			Person person = new Person();
			person.setName("Person");
		    person.setDogs(dogs);
			
			em.persist(person);
			
			em.getTransaction().commit();
			
			System.out.println("terminou transição");
			
		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		}finally{
			em.close();
		}
		
	}

}
Você testou? O que aconteceu?
M

Velho o meu projeto estava no servidor, reiniciei ele e funcionou, vou tentar fazer um teste pra saber se a lista de pessoas que não estão sendo persistidas também vão pro banco, só pra saber.

M

Boa Tarde, então o problema não era a existencia de pessoas não persistidas na classe dog, fiz o teste e o erro continuou o problema era o seguinte, o meu projeto estava em um servidor e sempre após alterar um xml tende-se reiniciar esse servidor, e eu havia esquecido desse detalhe, já a questão da persistência se houver mais objetos envolvidos aos objetos que vão ser persistidos não da erro mas também esses objetos não são salvos.

Criado 22 de dezembro de 2012
Ultima resposta 23 de dez. de 2012
Respostas 8
Participantes 2