Pessoal, estou com problemas em gerar campos de auto incremento com o JPA.
Seguinte…
Se o campo serial for o Id, a sequência é gerada no postgres normalmente:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long numero;
Mas se tento pôr um campo auto incremento que não seja o Id, a sequência não é gerada no banco:
@Id
private long cpf;
@GeneratedValue(strategy=GenerationType.IDENTITY, generator="pessoa_cod_seq")
private int cod;
Alguma alma generosa teria, por favor, o remédio para essa minha dor de cabeça???
Já tentei também GenerationType.SEQUENCE e GenerationType.AUTO
O problema não está sendo a chave primária, isso ele gera.
O que não está gerando eh a sequencia do campo que quero que seja auto incremento. E este campo, não necessariamente, precisa ser a chave primária.
[quote=michellefpc]O problema não está sendo a chave primária, isso ele gera.
O que não está gerando eh a sequencia do campo que quero que seja auto incremento. E este campo, não necessariamente, precisa ser a chave primária.[/quote]
Mas é isso que estou querendo dizer. Se ele não for a chave primária, o Hibernate não irá gerar pra você.
org.hibernate.HibernateException: could not get or update next value
at br.unesp.sisor.dao.BaseDao.saveOrUpdate(BaseDao.java:47)
at br.unesp.sisor.action.gerais.SisorProcessoSalvarAction.execute(SisorProcessoSalvarAction.java:70)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:230)
at oracle.oc4j.network.ServerSocketAcceptHandler.access$800(ServerSocketAcceptHandler.java:33)
at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:831)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:595)
Um…michellefpc acho que agora que entendi a sua questão, é mesma da minha.
No meu caso tenho tabelas que não tem chaves primárias mas que tem campos com auto incremento
Preciso buscar valores de uma view que se encontra no banco através de JPA.
Tem alguma forma de pegar esses valores pela JPA pessoal? :roll:
Caraca… tb tenho o mesmo problema, tenho um campo que não é chave primária, mais ele tem que ser um auto increment… só que no hibernate as amotaçao @eneratedValue só é para atributo que tenham a anotaçao @Id…
Ta dificil hem…
Fui ler pra ter certeza: na seção 9.1.9 da JPA diz que @GeneratedValue so pode ser usado pra primary key. Nao é comportamento incorreto do hibernate.
Pra voce se esquivar dessa, minha sugestao é que voce gere o schema e então depois de um Alter Table para mudar a coluna para AUTO INCREMENT, e utilize a anotacao do hibernate @Entity com dynamic-insert e dynamic-update, assim ele nao ira inserir esse valor quando voce fizer um save/update/,erge, e o banco de dados que o tratara.
Paulo, então vc quer dizer que se eu n setar um valor à uma variavel de instancia utilizando o SET, o hibernate deixará que o banco de dados atribua o valor ao campo respectivo na tabela se eu utlizar @Entity com dynamic-insert e dynamic-update… ?