[RESOLVIDO] [eclipselink] Inserir valores na tabela com JPA

Bom dia,
Estou estudando JPA com eclipselink e, para testar estou usando essas classes:

[code]@Entity
@NamedQuery(name = Item.LISTAR_TODOS, query=“select i from Item i”)
public class Item {
public static final String LISTAR_TODOS = “Item.findAll”;

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int codigo;
private String nome;
private double preco;

//Construtores, Getters e Setters		

}[/code]

[code]
public class ItemDAO implements DAO<Item> {

@Override
public void insert(Item obj) {
	EntityManager em = ConnectionFactory.getEntityManager();
	EntityTransaction tx = em.getTransaction();
	tx.begin();
	em.persist(obj);
	tx.commit();
	em.close();
}

@Override
public List&lt;Item&gt; list() {
	EntityManager em = ConnectionFactory.getEntityManager();
	TypedQuery&lt;Item&gt; query = (TypedQuery&lt;Item&gt;) em.createNamedQuery(Item.LISTAR_TODOS);
	List&lt;Item&gt; itens = query.getResultList();
	em.close();
	return itens;
}

}[/code]
Mas na hora de inserir

[code]public class TesteInsercaoItem {

public static void main(String[] args) {
	Item item = new Item();
	item.setNome("Item de teste 1");
	item.setPreco(1.0);
	ItemDAO dao = new ItemDAO();
	dao.insert(item);
	List&lt;Item&gt; itens = dao.list();
	for (Item i : itens) {
		System.out.println(i);
	}
}

}[/code]

Se eu rodar esse teste mais uma vez, ele só aparece o último registro inserido. Mesmo olhando no console do mysql, só aparece um registro gravado. Já tentei até criar outro objeto Item e persistir. Ainda só é mostrado um objeto na lista.

Vocês sabem dizer no que eu estou errando?

Obrigado pela ajuda.

Mas você manda inserir apenas um cara… dao.insert(item); :shock:

Sim, sim :smiley:
Mas já rodei essa classe com outros valores, criando dois e três objetos Item e ainda assim só retorna o último

Sim, sim :smiley:
Mas já rodei essa classe com outros valores, criando dois e três objetos Item e ainda assim só retorna o último[/quote]Coloca um exemplo do Main onde realmente acontece o erro? Pq nesse aí que você colocou não tem erro algum.

Sim, sim :smiley:
Mas já rodei essa classe com outros valores, criando dois e três objetos Item e ainda assim só retorna o último[/quote]Coloca um exemplo do Main onde realmente acontece o erro? Pq nesse aí que você colocou não tem erro algum.[/quote]

Então, se eu mudo os valores para

[code]public static void main(String[] args) {
Item item = new Item();
item.setNome(“Item de teste 2”);
item.setPreco(2.0);
ItemDAO dao = new ItemDAO();
dao.insert(item);

	List<Item> itens = dao.list();
	for (Item i : itens) {
		System.out.println(i);
	}
}[/code]

ele retorna isso

Mas de fato, eu reli o código e nas vezes eu que eu criei dois objetos item, ele não funcionou porque eu esqueci de chamar o dao.insert() :oops:

Você sabe o que pode ser esse primeiro erro?

[quote=felipeaqueiroz]Mas de fato, eu reli o código e nas vezes eu que eu criei dois objetos item, ele não funcionou porque eu esqueci de chamar o dao.insert() :oops:

Você sabe o que pode ser esse primeiro erro?[/quote]Desculpe, mas boiei… qual primeiro erro?

[quote=Hebert Coelho][quote=felipeaqueiroz]Mas de fato, eu reli o código e nas vezes eu que eu criei dois objetos item, ele não funcionou porque eu esqueci de chamar o dao.insert() :oops:

Você sabe o que pode ser esse primeiro erro?[/quote]Desculpe, mas boiei… qual primeiro erro?[/quote]

Eu troquei os valores do nome e preço do item e persisti. Daí sumiu no banco o primeiro item que eu tinha persistido, aquele com preço 1.0
Estou fazendo algo errado ou o persist do JPA é assim mesmo?

Veja se no seu persistence xml não está configurado para fazer drop e create do database.

Seria essa linha? (acho que sim)

Sendo assim, qual o valor deve estar?
Valeu por ajudar :slight_smile:

vê se o eclipselink tem uma opção update, daí somente atualizaria seu banco.

Funcionou!
Valeu gente, muito obrigado mesmo :smiley:

Seria essa linha? (acho que sim)

Sendo assim, qual o valor deve estar?
Valeu por ajudar :slight_smile:

[/quote]Pesquise no google por:
eclipselink eclipselink.ddl-generation values