Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Como gerar um identificado se utilizar o sequece com oracle

Cenário tenho um tabela que tem identificado de um lote de venda de produtos por lote.

9 respostas

Opa, Wesley! Beleza, cara? =)

Desculpa, não sei se entendi sua dúvida... Você poderia tentar explicar um pouco mais, por favor? =)

Fábio

No caso do MYSQL utilizamos a anotação GeneratedValue(strategy=GenerationType.IDENTITY) que deixa responsabilidade do JPA gerenciar o identificador.

E no caso do Oracle utilizamos a anotação @GeneratedValue(strategy = GenerationType.SEQUENCE) porém não que criar uma sequece no banco de dados para fazer esse gerenciamanto

solução!

Wesley,

Eu dei uma pesquisada e vi algumas pessoas comentando sobre esse problema... Alguns disseram que é necessário adicionar mais uma annotation... Além de colocar @GeneratedValue(strategy = GenerationType.SEQUENCE), tenta adicionar mais um atributo nessa anotação e adicionar mais uma anotação:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="mySequence")
@SequenceGenerator(name="mySequence", sequenceName="mySequence")

Qual DDL você está utilizando? update? Se não for, me parece que você precisa criar manualmente:

CREATE SEQUENCE mySequence;

Você poderia testar isso e me dizer se funcionou ou não, por favor? =)

Fábio

Teria outra forma sem utilizar sequece? e o JPA gerenciar isso, ex eu tenho um lote de venda de tv :

LOTETVMODELO
12SAMSUNG
13LG

somente o ID do lote vai ser único para cada lote, já id da TV sera variável uma Foreign key. Quero uma forma de gerenciar o id do lote

Wesley,

Se entendi corretamente, o ID do lote será uma Primary Key, enquanto o ID da TV será um Foreign Key, correto?

Para sua PK geralmente utilizar o @GeneratedValue, mesmo, se desejamos que a JPA faça o auto increment, sacou?

Para a sua FK, você pode usar @OneToOne, @OneToMany, @ManyToOneou@ManyToMany`, de acordo com sua regra de negócio... Seu provedor da JPA irá cuidar dos relacionamentos para você. =)

Fábio

Fábio mais uma Primary Key, não pdoe se repetir! e nesse caso por se trata de um lote vai ter vários registros com a mesmo id do lote.

Wesley,

Ah, boa! Agora acho que entendi sua questão... Rs.

O conjunto ID do lote e da TV, juntos, seriam sua chave primária?

Fábio

Fábio pensei em deixa ID do lote com indexes, e ID da TV como Foreign Key.

Wesley,

Acredito que possa ser uma solução viável, embora, sendo sincero, não me recordo exatamente como fazer isso...

Mas, analisando a questão novamente, pela tabela que você mostrou, me parece que ela é uma tabela intermediária no meio de uma relação @ManyToMany, percebe?

Você possui o ID do lote e o ID da TV... E cada um deles pode aparecer várias vezes...

Você poderia pensar em ter uma classe que representa o lote e uma outra que representa a TV... E um @ManyToMany entre eles:

// Classe Lote
public class Lote {
    @Id @GeneratedValue
    private Long id;

    @ManyToMany
    private List<Tv> tvs = new ArrayList<>();

    // Outras informações sobre o lote e métodos...
}

// Classe Tv
public class Tv {
    @Id @GeneratedValue
    private Long id;

    @ManyToMany(mappedBy = "tvs")
    private List<Lote> lotes = new ArrayList<>();

    // Outras informações sobre a TV e métodos...
}

Ao fazer dessa forma, você terá sua tabela com informações sobre os lotes, uma outra tabela com informações sobre as TVs e uma tabela intermediária será criada, com os ID's de ambos... =)

Fábio