quarta-feira, julho 22, 2009

Geração de Ids é problema do Banco e não do Java

Eu estava usando JPA e quando executei os testes unitários ocorreu a seguinte exceção:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
O Java quer que eu informe o Id. Por quê? Minha tabela usa sequences para gerar os Ids.

Depois de pesquisar, descobri que deve-se informar, por meio de uma GeneratedValue, como as chaves primárias serão geradas.

Como as minhas Ids são geradas automaticamente pelo banco de dados, eu tive que declarar a anotação dessa forma:
@GeneratedValue(strategy=GenerationType.IDENTITY)
O código da minha classe, que gerava a exceção acima era desse jeito:
@Entity
@Table(name = "authenticationlog", catalog = "mao", schema = "public")
public class AuthenticationLog implements Serializable {
@Id
@Column(name = "tansrvauthenticationlogid")
private Integer tansrvauthenticationlogid;
e agora está assim:
@Entity
@Table(name = "authenticationlog", catalog = "mao", schema = "public")
public class AuthenticationLog implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "tansrvauthenticationlogid")
private Integer tansrvauthenticationlogid;
Isso resolveu o meu problema. Espero que resolva o teu.

Nenhum comentário: