Boa tarde pessoal,
Voltei a utilizar este framework (Hibernate), pois tinha deixado um pouco de lado algum tempo atrás… (que falta me fez )
Voltei a utilizá-lo, tentando persistir em um base de dados Derby.
Juro que procurei informações sobre isso que vou comentar…
Os IDs gerados para o campo ID do meu banco (field anotado na classe, com GeneratedValue do pacote javax.persistence.GeneratedValue ), são números “estrombólicos”.
Nas primeiras inserções (persistindo) na base, foi gerado ID=1 ,ID=2 …
Mas depois ao tentar inserir uma "porrada de itens, foram gerados IDs do tipo:
32768
32769
32770
Alguém saberia dizer, o que poderia estar causando isto?
Vlw!
posta o codigo da classe para poder dar uma olhada…
Logo abaixo, está o código da classe que me retorna as sessões:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibFact {
private static SessionFactory factory;
private static Session session;
private static AnnotationConfiguration cfg;
private HibFact(){}
public static Session getSession()
{
if(factory!=null){
return factory.openSession();
}
else{
cfg=new AnnotationConfiguration();
cfg.addAnnotatedClass(Produto.class);
factory=cfg.buildSessionFactory();
session=factory.openSession();
return session;
}
}
}
E na minha classe DAO, utilizo Singleton:
[code]import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.hibernate.HibernateFactory;
import br.com.caelum.hibernate.Produto;
public class ProdutoDAO {
private Session session;
private static ProdutoDAO referencia;
private Transaction transaction;
//Seguindo Design Pattern Singleton
private ProdutoDAO() {
this.session=HibernateFactory.getSession();
}
public static ProdutoDAO getInstance() {
if(referencia==null){
return new ProdutoDAO();
}
return referencia;
}
public void salva(Produto p) {
this.transaction=this.session.beginTransaction();
this.session.save(p);
this.transaction.commit();
}
public void remove(Produto p) {
this.session.delete(p);
}
public Produto procura(int id) {
return (Produto)this.session.load(Produto.class, id);
}
public void atualiza(Produto p) {
this.session.update(p);
}
}
[/code]
Algo mais, é só falar…
Vlw!
Estou usando para gerar sequencialmente da seguinte forma, e esta funcionando testa ae:
@Id
@SequenceGenerator(name = "seqCidade", sequenceName = "System.\"seqCidade\"", initialValue=1, allocationSize=0)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqCidade")
@Column(name="codigo")
private Integer cod;
Leonardo,
Fiz da mesma forma que vc passou e testei, alterando alguns nomes.
@Id
@SequenceGenerator(name="idCad",sequenceName="System.\"idCad\"",
initialValue=1,allocationSize=0)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="idCad")
@Column(name="id")
private int id;
Mas gerou o seguinte erro na sintaxe:
4867 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 20000, SQLState: 42X01
4867 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Syntax error: Encountered "System" at line 1, column 20.
Até mudei o nome da sequência, colocando um nome qualquer só para teste e o erro persiste.
Vlw!
Onde está System altere e coloque o nome do shema que vc esta utilizando.
Qualquer dúvida poste ae.
Abraço
rollei
Dezembro 23, 2008, 2:18pm
#7
@Id
@Basic(optional = false)
@SequenceGenerator(name = "AlgumaCoisa", sequenceName = "ESQUEMA.SEQUENCIA", initialValue=1, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AlgumaCoisa")
@Column(name = "NOMECOLUNA", nullable = false)
private Long nomeColuna;
minhas sequences sao bem parecidas com as do amigo.
para maiores esclarecimentos entre neste site e veja a apostila de Hibernate com Anotations:
http://www.j2eebrasil.com.br/mostrar/97
Abraço
[quote=leonardoMachado]para maiores esclarecimentos entre neste site e veja a apostila de Hibernate com Anotations:
http://www.j2eebrasil.com.br/mostrar/97
Abraço[/quote]
Li a apostila e resolveu…
Fiz de outra forma, mas o importante é que o negócio funcionou!
Vlw!
blz…
essa apostila sempre me salva tambem…heheheheh
qualquer duvida posta ae…
abraço