autoIncremento no Hibernate e sqlserver 2005

7 respostas
FabioWinck

Boa tarde a todos…
Estou quebrando a cabeça para inserir um registro em uma tabela com dois campos…um cd_country int autoincremento do sqlserver e outro ds_country varchar(200)…como eu posso fazer para o hibernate gravar utilizando o autoincremento do sqlserver…?

Tentei fazer assim

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

@Column(name = cd_country, unique = true, nullable = false)	

public Integer getCdCountry() {

return this.cdCountry;

}

Alguma idéia…?
Desde já agradeço a força…
Fábio Winck

7 Respostas

S

use IDENTITY

@GeneratedValue(strategy = GenerationType.IDENTITY)
FabioWinck

Agradeço muito a resposta…mas agora gerou o seguinte erro…

Ficou Assim:

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = cd_country, unique = true, nullable = true)	

public Integer getCdCountry() {

return this.cdCountry;

}

Gerou isso:

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.SQL - insert into Country (ds_country, cd_country) values (?, ?)

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.jdbc.AbstractBatcher - preparing statement

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Dehydrating entity: [br.org.webProject.mapping.Country#]

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.type.StringType - binding outro teste Fábio Winck to parameter: 1

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.jdbc.AbstractBatcher - closing statement

[2007-10-18 05:17]  -http-8080-Processor24 - DEBUG org.hibernate.util.JDBCExceptionReporter - could not insert: [br.org.webProject.mapping.Country] [insert into Country (ds_country, cd_country) values (?, ?)]

com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 2.

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)

at com.microsoft.sqlserver.jdbc.SQLServerConnection.buildParamTypeDefinitions(Unknown Source)

at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(Unknown Source)

at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(Unknown Source)


Primeiro que inverteu a ordem dos campos no insert e depois pediu para setar o valor para o campo cd_country…
Coisa muito louca…
Mais alguma ideia…?

Grato…
Fábio Winck

S

ae fabio post seu DAO pra gente dar uma olhada…

FabioWinck

Boa tarde…
soudaniel_01 desculpe mas não entendi…não tenho uma classe DAO especifica que acessa o banco…somente um classe que herda de org.springframework.orm.hibernate3.support.HibernateDaoSupport…então só chamo getHibernateTemplate().save(country);

public void saveCountry(Country country){

getHibernateTemplate().save(country);

}

é só isso que tenho…
Grato pela atenção…
Fábio Winck

FabioWinck

Bhá…que coisa mais louca…tive que desabilitar o autoIncremento das tabelas para funcionar, então antes tenho que setar o valor da minha chave…
Só que agora esta dando o seguinte erro…

com.microsoft.sqlserver.jdbc.SQLServerException: É necessário declarar a variável de tabela “@P1.

at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)

at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)

da isso por causa do seuinte código…

String sql = "select max(?)+1 from ? ";

PreparedStatement cs = session.connection().prepareStatement(sql);

cs.setString(1, columnName.toLowerCase());

cs.setString(2, tableName.toLowerCase());

ResultSet rs = cs.executeQuery();

criei um anotation com esse código para pegar a o último ID + 1…ok…ok, sei que é “POG”…mas foi o único jeito…
alguém te alguma idéia…?

Grato pela atenção…
Fábio Winck

J

Bom dia!
Fábio… estou com o mesmo problema q vc usando SQL Server 2000.

Conseguiu achar uma solução definitiva? Ou, terei q fazer a mesma pog q vc fez? :smiley:
Abraços!

FabioWinck

Oi Junior, tudo bem…?
Tche…acredito que seja a ser pog mas tudo bem… só consegui resolver assim, só que criei um java Annotation pata fazer isso, se quizer te mando os fontes, só me adiciona no teu msn [email removido].

Flw
Fábio

Criado 18 de outubro de 2007
Ultima resposta 7 de dez. de 2007
Respostas 7
Participantes 3