Auto-Incremento PostgreSQL com chave primária TYPE serial

851 views
Skip to first unread message

Cristofer Sousa

unread,
May 9, 2011, 4:44:03 PM5/9/11
to jav...@googlegroups.com
Prezados, boa tarde !

Gostaria de saber se alguém já se deparou com isto, tenho uma tabela do meu banco de dados onde a mesma possui uma chave primaria porém ela é do tipo serial,  (foi escolhido fazer com que esse atributo tivesse esse tipo pois o postgresql já entende  como uma sequencia esse tipo).

Porém ao criar minha classe com entidade do banco de dados percebi que não existe uma forma de integrar o serial com o tipo integer no jsf, ele apresenta o seguinte erro qdo vou tentar criar um novo registro na minha tabela pelo projeto :
GRAVE: javax.faces.FacesException: No validator could be found for type: java.lang.Integer

    public Local(Integer reg, String nome, String lat, String lgt,int codigo) {
        this.reg = reg;
        this.nome = nome;
        this.lat = lat;
        this.lgt = lgt;
        this.codigo = codigo;

Gostaria de saber se tem como eu tratar para que o jsf entenda que a minha tabela que possui o atributo serial que seja entendido por ele, pois eu até pensei em alter o tipo do atributo para inteiro porém a minha tabela é cascade é possui várias conexões com outras tabelas , da qual não posso me desfazer da tabela e criar novamente ou senão tentar alterar o atributo da tabela.

Abraços a todos !


Cristofer Sousa

unread,
May 9, 2011, 4:47:41 PM5/9/11
to jav...@googlegroups.com
Esqueci de informar que no caso toda as minhas tabelas são do tipo integer somente essa é do tipo serial então  acredito que não posso fazer essa alteração:


  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping schema="testes">  
  6.     <class name="test.Filho">  
  7.         <id name="id">  
  8.             <generator class="sequence">  
  9.                 <param name="sequence">nome_sequencia</param>  
  10.             </generator>  
  11.         </id>  
  12.         <property name="idade"/>  
  13.     </class>  
  14. </hibernate-mapping> 


 

Rafael de Paula Souza

unread,
May 9, 2011, 4:53:39 PM5/9/11
to jav...@googlegroups.com
Já tentou @GeneratedValue(strategy=GenerationType.IDENTITY) ?
--
Rafael de Paula Souza

http://br.linkedin.com/in/rafaelpsouza

Sublimus - Desenvolvimento de Software e Soluções Web.
www.sublimus.com.br






--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

David

unread,
May 9, 2011, 9:52:19 PM5/9/11
to jav...@googlegroups.com, jav...@googlegroups.com
Uso identity aqui sem problemas para campos do tipo serial no postura

Enviado via iPhone

Hedley Luna

unread,
May 10, 2011, 8:27:57 AM5/10/11
to jav...@googlegroups.com
Usa o @SequenceGenerator com allocationSize=1 e usa a sequencia no teu campo serial, eu uso e dá certo tranquilo.
Hedley Luna
Oracle Certified Java Programmer 6
Graduando Ciência da Computação - UECE
Laboratório de Computação Científica - LCC - UECE
Desenvolvedor Java - Instituto Orion de Ciência e Tecnologia

Frederiko Oliveira

unread,
May 10, 2011, 8:48:24 AM5/10/11
to jav...@googlegroups.com
@Entity
@Table(name = "tbatividade")
@SequenceGenerator(name = "tbatividade_idatividade_seq", sequenceName = "tbatividade_idatividade_seq", allocationSize = 1) 

@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tbatividade_idatividade_seq")
    private Integer idAtividade;


As anotações de uma classe, isso já feito pelo netbeans, tambem uso postgres e todas minhas PK são serais.

Em 9 de maio de 2011 22:52, David <davi...@gmail.com> escreveu:



--
Att,
   Frederiko Oliveira de Sousa

Cristofer Sousa

unread,
May 10, 2011, 2:22:00 PM5/10/11
to jav...@googlegroups.com
Seguinte , alterei para Sequence ele ainda não  salvou no meu banco pelo projeto em execução.

Tabela criada: 

-- Table: "local"

-- DROP TABLE "local";

CREATE TABLE "teste"
(
  reg serial NOT NULL,
  nome character(80),
  lat character(80),
  lgt character(80),
  codigo integer,
  medida character(3),
  tamanho double precision,
  CONSTRAINT local_pkey PRIMARY KEY (reg));

Sequencia criada

CREATE SEQUENCE local_reg_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 5
  CACHE 1;
ALTER TABLE local_reg_seq OWNER TO gecampe;



Tabela sendo alterada para se referir a sequencia:

ALTER TABLE teste ALTER COLUMN reg set default nextval('local_reg_seq'::regclass);


Até aqui eu fiz tudo certo no meu bando de dado está funcionando perfeitamente sem que seja necessário eu colocar o valor do campo reg que se trata da minha PK.

Entretanto lá no meu projeto, acontece o seguinte erro quando mando salvar um novo registro pela minha aplicação:
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:619)


GRAVE: javax.faces.FacesException: No validator could be found for type: java.lang.Integer
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:84)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
    at java.lang.Thread.run(Thread.java:619)
Caused by: javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer
    at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:244)
    at org.hibernate.validator.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:227)
    at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:179)
    at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:135)
    at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:121)
    at org.hibernate.validator.engine.ValidatorImpl.validateValueForGroup(ValidatorImpl.java:648)
    at org.hibernate.validator.engine.ValidatorImpl.validateValue(ValidatorImpl.java:584)
    at org.hibernate.validator.engine.ValidatorImpl.validateValue(ValidatorImpl.java:146)
    at javax.faces.validator.BeanValidator.validate(BeanValidator.java:306)
    at javax.faces.component.UIInput.validateValue(UIInput.java:1149)
    at javax.faces.component.UIInput.validate(UIInput.java:967)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
    at javax.faces.component.UIInput.processValidators(UIInput.java:698)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    ... 28 more


Minha classe está da seguinte maneira:

public class Teste implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
     //insercao do auto_increment
    @SequenceGenerator( name = "local_seq", sequenceName ="local_reg_seq", allocationSize = 1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="local_reg_seq")
    // fim do auto incremento
    @Basic(optional = false)
    //@NotNull
    @Column(name = "reg")
    private Integer reg;
    @Size(min = 1, max = 80)
    @Column(name = "nome")
............................


Já não sei pra onde correr agora ! =S

Abraços a todos !


Marcio Eduardo

unread,
May 10, 2011, 2:39:35 PM5/10/11
to jav...@googlegroups.com
Olá, tenta isso.


    private static final long serialVersionUID = 1L;
    @Id
     //insercao do auto_increment
    @SequenceGenerator( name = "local_seq", sequenceName ="local_reg_seq", allocationSize = 1)
    @GeneratedValue(strategy=
GenerationType.SEQUENCE,generator="local_seq")

    // fim do auto incremento
    @Basic(optional = false)
    //@NotNull
    @Column(name = "reg")
    private Integer reg;
    @Size(min = 1, max = 80)
    @Column(name = "nome")
Lembrar que o sequenceName é o nome criado pelo o postgres.
 




Abraços a todos !


Cristofer Sousa

unread,
May 10, 2011, 2:44:26 PM5/10/11
to jav...@googlegroups.com
O erro continua:

AVISO: No validator could be found for type: java.lang.Integer

javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer
    at org.hibernate.validator.engine.ConstraintTree.verifyResolveWasUnique(ConstraintTree.java:244)
    at org.hibernate.validator.engine.ConstraintTree.findMatchingValidatorClass(ConstraintTree.java:227)
    at org.hibernate.validator.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:179)
    at org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:135)
    at org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:121)
    at org.hibernate.validator.engine.ValidatorImpl.validateValueForGroup(ValidatorImpl.java:648)
    at org.hibernate.validator.engine.ValidatorImpl.validateValue(ValidatorImpl.java:584)
    at org.hibernate.validator.engine.ValidatorImpl.validateValue(ValidatorImpl.java:146)
    at javax.faces.validator.BeanValidator.validate(BeanValidator.java:306)
    at javax.faces.component.UIInput.validateValue(UIInput.java:1149)
    at javax.faces.component.UIInput.validate(UIInput.java:967)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
    at javax.faces.component.UIInput.processValidators(UIInput.java:698)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)

Marcio Eduardo

unread,
May 10, 2011, 3:13:40 PM5/10/11
to jav...@googlegroups.com
Retira o @Size(min = 1, max = 80)

2011/5/10 Cristofer Sousa <cristof...@gmail.com>

Cristofer Sousa

unread,
May 10, 2011, 3:15:16 PM5/10/11
to jav...@googlegroups.com
Eu exclui a classe e fiz ela de novo,  ae funcionou o incremento sem problema !
Reply all
Reply to author
Forward
0 new messages