Auto Incremento Postgresql, GeneratedValue Sequence

340 views
Skip to first unread message

Cristofer Sousa

unread,
Dec 16, 2010, 2:27:13 PM12/16/10
to javasf: JavaServer Faces Group
@Entity
@Table(name = "maqeqp")
@NamedQueries({
@NamedQuery(name = "Maqeqp.findAll", query = "SELECT m FROM Maqeqp
m"),
@NamedQuery(name = "Maqeqp.findByReg", query = "SELECT m FROM
Maqeqp m WHERE m.reg = :reg"),
@NamedQuery(name = "Maqeqp.findByNome", query = "SELECT m FROM
Maqeqp m WHERE m.nome = :nome"),
@NamedQuery(name = "Maqeqp.findByCodigo", query = "SELECT m FROM
Maqeqp m WHERE m.codigo = :codigo"),
@NamedQuery(name = "Maqeqp.findByTipo", query = "SELECT m FROM
Maqeqp m WHERE m.tipo = :tipo")})
public class Maqeqp implements Serializable {
//private static final long serialVersionUID = 1L;
@Id
//insercao do auto_increment
@SequenceGenerator( name = "seq_maqeqp", sequenceName = "sq_maqeqp",
allocationSize = 1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_maqeqp")
private Integer reg;

//@Basic(optional = false)
@Column(name = "reg",nullable = false )
//private Integer reg;
//@Basic(optional = false)
//@Column(name = "nome")
private String nome;
@Basic(optional = false)
@Column(name = "codigo")
private int codigo;
@Basic(optional = false)
@Column(name = "tipo")
private char tipo;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "maqeqp")
private Collection<Fichamaq> fichamaqCollection;
public Maqeqp() {
}

A minha pk é reg eu quero fazer um autoincremento nela pelo codigo
acima eu setei para que isso ocorre-se no meu banco de dados eu criei
uma sequencia com o nome seq_maqepe, o erro que está ta dando é quando
executo meu projeto o campo reg da minha tabela não é po;pulado , eu
queria que o usuario não precisa-se preencher esse campo já aparecesse
preenchido no entanto não tá rolando.

SEVERE: java.lang.NullPointerException
WARNING: JSF1063: AVISO! Definindo valor de atributo não serializável
em HttpSession (chave: maqeqpController, classe do valor:
br.cppse.controladorJSF.MaqeqpController).

Vendo esse erro na saída eu vi que o erro está aqui :

public Maqeqp getSelected() {
if (current == null) {
current = new Maqeqp();
selectedItemIndex = -1;
}
return current;
}


Alguem saberia como resolver esse pepino pq ele ta setando para nulo
acredito que é por isso que o auto incremento não está indo !!!

Abraços

Rafael de Paula Souza

unread,
Dec 16, 2010, 2:54:53 PM12/16/10
to jav...@googlegroups.com
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;


Dessa forma ai o PostgreSQL cria um campo serial (auto incremento). Era isso?
--
Rafael de Paula Souza

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

Erivando

unread,
Dec 16, 2010, 3:23:31 PM12/16/10
to javasf: JavaServer Faces Group
Depende de como esta sendo feito no Bd tambem...

Cristofer faz assim:

no banco....

CREATE TABLE usuarios
(
usuario_cod serial NOT NULL,
usuario_nome character varying(50),
CONSTRAINT pk_usuarios PRIMARY KEY (usuario_cod)
) ;
-- ao rodar o script seu sequence será criado

e assim no código...

@Table(name = "usuarios")
public class Usuario {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long usuario_cod;
private String usuario_nome;
...

Informa se deu certo, com certeza vai rolar!

Erivando

On 16 dez, 17:54, Rafael de Paula Souza <rafael....@gmail.com> wrote:
> @Id
>     @GeneratedValue(strategy = GenerationType.IDENTITY)
>     private Integer id;
>
> Dessa forma ai o PostgreSQL cria um campo serial (auto incremento). Era
> isso?
> --
> Rafael de Paula Souza
>
> Sublimus - Desenvolvimento de Software e Soluções Web.www.sublimus.com.br
>
> Em 16 de dezembro de 2010 17:27, Cristofer Sousa
> <cristofer.so...@gmail.com>escreveu:

Cristofer Sousa

unread,
Dec 17, 2010, 11:32:09 AM12/17/10
to jav...@googlegroups.com
Continua com erro:


SEVERE: java.lang.NullPointerException
WARNING: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: maqeqpController, classe do valor: br.cppse.controladorJSF.MaqeqpController).

Meu Banco de Dados:

CREATE TABLE maqeqp
(
  reg integer NOT NULL DEFAULT nextval('seq_maqeqp'::regclass),
  nome character(80) NOT NULL,
  codigo integer NOT NULL,
  tipo character(1) NOT NULL,
  CONSTRAINT pk001_maqeqp PRIMARY KEY (reg)
)
WITH (
  OIDS=FALSE
);

Minha sequencia criada:
CREATE SEQUENCE seq_maqeqp
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;


Meu Modelo:


@Entity
@Table(name = "maqeqp")
@NamedQueries({
    @NamedQuery(name = "Maqeqp.findAll", query = "SELECT m FROM Maqeqp m"),
    @NamedQuery(name = "Maqeqp.findByReg", query = "SELECT m FROM Maqeqp m WHERE m.reg = :reg"),
    @NamedQuery(name = "Maqeqp.findByNome", query = "SELECT m FROM Maqeqp m WHERE m.nome = :nome"),
    @NamedQuery(name = "Maqeqp.findByCodigo", query = "SELECT m FROM Maqeqp m WHERE m.codigo = :codigo"),
    @NamedQuery(name = "Maqeqp.findByTipo", query = "SELECT m FROM Maqeqp m WHERE m.tipo = :tipo")})
public class Maqeqp implements Serializable {
  @Id
//insercao do auto_increment
@SequenceGenerator( name = "seq_maqeqp", sequenceName = "sq_maqeqp", allocationSize = 1)
@GeneratedValue(strategy=GenerationType.IDENTITY,generator="seq_maqeqp")
private Integer reg;
    @Basic(optional = false)

    @Column(name = "reg",nullable = false )
   
    //@Column(name = "nome")
    private String nome;
    @Basic(optional = false)
    @Column(name = "codigo")
    private int codigo;
    @Basic(optional = false)
    @Column(name = "tipo")
    private char tipo;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "maqeqp")
    private Collection<Fichamaq> fichamaqCollection;
    public Maqeqp() {
    }



Meu Controlador:

@ManagedBean (name="maqeqpController")
@SessionScoped
public class MaqeqpController {

    private Maqeqp current;
    private DataModel items = null;
    @EJB private br.cppse.controladorBean.MaqeqpFacade ejbFacade;
    private PaginationHelper pagination;
    private int selectedItemIndex;

    public MaqeqpController() {

   
    }
    public Maqeqp getSelected() {
        if (current == null) {
            current = new Maqeqp();
            selectedItemIndex = -1;
        }
        return current;
    }

    private MaqeqpFacade getFacade() {
        return ejbFacade;
    }


Alguém ajuda por favor....ja tentei  IDENTITY / AUTO  / SEQUENCE nada  vaii ...
--

("Embora ninguém possa voltar atrás e fazer um novo começo, qualquer um pode começar agora e  fazer um novo fim."  Chico Xavier )

----------------------------------------------
Cristofer Sousa
Tecnólogo em Análise e Desenvolvimento de Sistemas
Instituto Federal de São Paulo

---------------------------------------------------

Alex Monteiro

unread,
Dec 17, 2010, 12:42:49 PM12/17/10
to jav...@googlegroups.com
Cristofer, você colocou na sua mensagem que o nome da sequence no banco é "seq_maqepe" e na tua anotação no bean está assim @SequenceGenerator( name = "seq_maqeqp", sequenceName = "sq_maqeqp",allocationSize = 1), se não tiver sido erro de digitação sua na mensagem, o erro está aí, altere o nome da sequence no banco. E outra acrescenta o anotação @COLLUMN.


@SequenceGenerator( name = "seq_maqeqp", sequenceName = "sq_maqeqp",
  allocationSize = 1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_maqeqp")
@Column(name = "reg",nullable = false )
private Integer reg;


--
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



--
Alex Monteiro
http://br.linkedin.com/in/aalexmonteiro

Cristofer Sousa

unread,
Dec 17, 2010, 12:57:23 PM12/17/10
to jav...@googlegroups.com
Olá, eu corrigo o erro de digitação mas agora está dando um outro erro:


@Entity
@Table(name = "maqeqp")
@NamedQueries({
    @NamedQuery(name = "Maqeqp.findAll", query = "SELECT m FROM Maqeqp m"),
    @NamedQuery(name = "Maqeqp.findByReg", query = "SELECT m FROM Maqeqp m WHERE m.reg = :reg"),
    @NamedQuery(name = "Maqeqp.findByNome", query = "SELECT m FROM Maqeqp m WHERE m.nome = :nome"),
    @NamedQuery(name = "Maqeqp.findByCodigo", query = "SELECT m FROM Maqeqp m WHERE m.codigo = :codigo"),
    @NamedQuery(name = "Maqeqp.findByTipo", query = "SELECT m FROM Maqeqp m WHERE m.tipo = :tipo")})
public class Maqeqp implements Serializable {
  @Id
//insercao do auto_increment
@SequenceGenerator( name = "seq_maqeqp", sequenceName = "seq_maqeqp", allocationSize = 1)
@GeneratedValue(strategy=GenerationType.IDENTITY,generator="seq_maqeqp")
private Integer reg;
    @Basic(optional = false)

    @Column(name = "reg",nullable = false )




SEVERE: java.lang.NullPointerException

O erro acima dá até o momento que executo o projeto depois que eu tento inserir um dado na minha tabela pela pagina jsf em novo ae ele dá o erro abaixo:

WARNING: JSF1063: AVISO! Definindo valor de atributo não serializável em HttpSession (chave: maqeqpController, classe do valor: br.cppse.controladorJSF.MaqeqpController).
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
INFO: EclipseLink, version: Eclipse Persistence Services - 2.0.1.v20100213-r6600
INFO: file:/home/embrapa/NetBeansProjects/gecampe/build/web/WEB-INF/classes/_edilsonPU login successful


=S

Marcio Eduardo

unread,
Dec 17, 2010, 1:05:35 PM12/17/10
to jav...@googlegroups.com
primeiro:
public class MaqeqpController implements Serializable

segundo


CREATE SEQUENCE seq_maqeqp
  INCREMENT 1

@SequenceGenerator( name = "seq_maqeqp", sequenceName = "seq_maqeqp", allocationSize = 1)
@GeneratedValue(strategy=
GenerationType.IDENTITY,generator="seq_maqeqp")


creio que só seja isso, pois o que vi foi que está usando um bem em escopo de sessão sem implementar o Serializable

e o sequenceName tem que ser igual ao do banco (postgres).

Cristofer Sousa

unread,
Dec 17, 2010, 1:15:59 PM12/17/10
to jav...@googlegroups.com
Amigo  mas minha sequencia já tem:


CREATE SEQUENCE seq_maqeqp
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;


Meu controlador com a correção que você informou:


@ManagedBean (name="maqeqpController")
@SessionScoped
public class MaqeqpController implements Serializable {


    private Maqeqp current;
    private DataModel items = null;
    @EJB private br.cppse.controladorBean.MaqeqpFacade ejbFacade;
    private PaginationHelper pagination;
    private int selectedItemIndex;

    public MaqeqpController() {
   
    }
    public Maqeqp getSelected() {
        if (current == null) {
            current = new Maqeqp();
            selectedItemIndex = -1;
        }
        return current;
    }

    private MaqeqpFacade getFacade() {
        return ejbFacade;
    }


O erro que está dando agora quando inicio o projeto e depois que tento inserir um registro no meu banco abaixo:


SEVERE: java.lang.NullPointerException

INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.
INFO: EclipseLink, version: Eclipse Persistence Services - 2.0.1.v20100213-r6600
INFO: file:/home/embrapa/NetBeansProjects/gecampe/build/web/WEB-INF/classes/_edilsonPU login successful


Minha pagina JSF: CRUD -> NOVO MAQEQP.XHTML

<h:panelGroup id="messagePanel" layout="block">
                <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
            </h:panelGroup>
            <h:form>
                <h:panelGrid columns="2">
 // AQUI FICA O MEU REG QUE EU QUERO QUE INCREMENTE A CADA NOVO REGISTRO ESSA PAGINA EXECUTA SEMPRE QUE O USER CLICAR EM NOVO.....

                  <h:outputLabel value="Reg:" for="reg" />
                   <h:inputText id="reg" value="#{maqeqpController.selected.reg}" title="Informe a Reg" required="true" requiredMessage="#{bundle.Msg_Obrigatorio}"/>





                    <h:outputLabel value="Nome:" for="nome" />
                    <h:inputText id="nome" value="#{maqeqpController.selected.nome}" title="Informe o Nome" required="true" requiredMessage="#{bundle.Msg_Obrigatorio}"/>
                    <h:outputLabel value="Codigo:" for="codigo" />
                    <h:inputText id="codigo" value="#{maqeqpController.selected.codigo}" title="Informe o Codigo" required="true" requiredMessage="#{bundle.Msg_Obrigatorio}"/>
                    <h:outputLabel value="Tipo:" for="tipo" />
                    <h:inputText id="tipo" value="#{maqeqpController.selected.tipo}" title="Informe o Tipo" required="true" requiredMessage="#{bundle.Msg_Obrigatorio}"/>
                    </h:panelGrid>
                <br />
                <h:commandLink action="#{maqeqpController.create}" value="#{bundle.BotaoSalvar}" />
                <br />
                <br />
                <h:commandLink action="#{maqeqpController.prepareList}" value="#{bundle.BotaoListar}" immediate="true"/>
                <br />
                <br />
                <h:commandLink value="#{bundle.Index}" action="/index" immediate="true" />
            </h:form>
        </ui:define>
Reply all
Reply to author
Forward
0 new messages