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<Item> list() {
EntityManager em = ConnectionFactory.getEntityManager();
TypedQuery<Item> query = (TypedQuery<Item>) em.createNamedQuery(Item.LISTAR_TODOS);
List<Item> 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<Item> 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
Mas já rodei essa classe com outros valores, criando dois e três objetos Item e ainda assim só retorna o último
Sim, sim
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
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
vê se o eclipselink tem uma opção update, daí somente atualizaria seu banco.
Funcionou!
Valeu gente, muito obrigado mesmo
Seria essa linha? (acho que sim)
Sendo assim, qual o valor deve estar?
Valeu por ajudar
[/quote]Pesquise no google por:
eclipselink eclipselink.ddl-generation values