Pessoal é o seguinte , queria saber se vocês sabem como eu posso salvar esta classe no banco
class Usuario{
private String[] emails;
}
Pessoal é o seguinte , queria saber se vocês sabem como eu posso salvar esta classe no banco
class Usuario{
private String[] emails;
}
Obs(Suponha que eu não tenho a tabela emails)
Erickfm8,
Tem que ser um array de String[]? Não pode ser um Set ou List ?
public class Usuario {
...
@OneToMany(cascade = { CascadeType.MERGE, CascadeType.REMOVE },
fetch = FetchType.EAGER, mappedBy = "usuario")
private Set<String> emails;
public String[] getArrayEmails() {
String[] arrayEmails = null;
if(this.emails != null && this.email.size() >0 ) {
String[] arrayEmails = (String[])(this.emails.toArray(emails.size());
}
return arrayEmails;
}
....
}
@braços
Sim temque ser um array de String[] , porem gostei dessa solução, mais não tem como salvar o array de String via Jap? Não existe alguma forma?
Obrigado por responder ccllss
So arrumando ali “Jap” é Jpa
Ola,
Seguinte, é quase uma regra:
Se uma instnacia de uma classe tem/pode ter referencia para 1 ou mais instancias de outra classe, esta relação é 1->0**N, então vc irá precisar de outra tabela.
Em JPA, até onde sei, não há como trabalhar com arrays… não poderias converter este tipo para um set ou list, como o colega comentou?
Ps.: quando vc digitar algo errado, na resposta, vc pode edita-la… assim fica mais légivel do que enviar outra resposta
vc esta usando o eclipse, pq na no netbeans quando vc gera as classes a partir do banco de dados, ele ja lhe dar com os relacionamentos, e não tem array é tudo List.
Então pessoal acho que não me expressei direito é o seguinte.
Primeiramente eu estou usando netbeans, é aquele exemplo usuario e emai era so para vocês enteder o quie eu estou querendo, ou seja eu queria saber se é possivil armazenar um array em uma tabela, ou existe alguma forma diferente de fazer isso entendeu? o caso é o seguinte
especificando o meu caso é o seguinte
tenho a classe
public class Cartao {
private String NumerosCartao[];
public Cartao() {
this.gerarNumeros();
}
public String[] getNumerosCartao() {
return NumerosCartao;
}
public void setNumerosCartao(String[] numerosCartao) {
this.NumerosCartao = numerosCartao;
}
public String[] gerarNumeros() {}// este metodo gera numeros aleatorio e inseri no array
}
preciso armazena esta classe no banco, não vejo necessidade de criar outra tabela
"neste caso"
erickfm8,
Então brow… O que te impede de fazer isso ?
public class Cartao {
@OneToMany(cascade = { CascadeType.MERGE, CascadeType.REMOVE },
fetch = FetchType.EAGER, mappedBy = "usuario")
private Set<String> NumerosCartao;
public Cartao() {
this.gerarNumeros();
}
public Set<String> getNumerosCartao() {
return NumerosCartao;
}
public void setNumerosCartao(Set<String> numerosCartao) {
this.NumerosCartao = numerosCartao;
}
public void gerarNumeros() {
String[] arrayGerado = <CRIA SEU ARRAY CONFORME SUA NECESSIDADE>;
Collections.addAll(this.NumerosCartao, arrayGerado);
}
}
Boa solução, mais fixando isto ainda , está e a unica maneira? finalizando não tem como usar arrays?
se vc fizer a geração das classes verá que nao tera array de e-mails sem ter uma tabela no banco…;s e se tiver a tabela no banco a classe gerada virá com List/Collection
Usando Hibernate você pode usar a anotação Collection of Elements.
Daí você pode salvar, por exemplo, uma Lista de String.
@CollectionOfElements
List<String> getUsuarios(){
return this.usuarios;
}
A Diferença é que dessa maneira, no Banco, será criada uma tabela representando uma Entidade Fraca chamada Usuarios; Além disso, você não
tem que se preocupar em ficar colocando @OneToMany e @ManyToOne em ninguém. Só crie a Lista, anote com @CollectionOfElements e seja feliz.
Experimenta aí
Eu testei aqui, e você pode usar o CollectionOfElements direto com um array de String. Daí acho q atende sua necessidade:
private String[] x;
@CollectionOfElements
public String[] getX() {
return x;
}
public void setX(String[] x) {
this.x = x;
}
O que você acha?
Estou usando TopLink JPA , acho que a melhor solução vai ser a do nosso colega ccllss certo?
sim…nesse caso tem que ter a tabela que vc tanto nao quer
Pra uma tabela só, com o Collection Of Elements, dá pra usar a anotação @JoinTable junto.
Segundo a documentacao do Hibernate Annotations:
private String[] x;
@CollectionOfElements
@JoinTable(
table=@Table(name="nomeDaTabela"))
public String[] getX() {
return x;
}
}
Mas, tipo, se você estiver usando só JPA, a solução do amigo acima talvez seja melhor pra você.
Acho que daqui deste POST que você abriu deu pra tirar bastante idéia. Só não esquece de colocar um [RESOLVIDO] depois.
Flw.
é isso ae…
@CollectionOfElements
este carinha armazena um Collections no banco sem criar uma tabela
Na verdade, se não usar um @JoinTable junto do @CollectionOfElements, ele cria uma tabela (uma entidade fraca) sem chave primária, mas com uma chave estrangeira apontando para a Entidade Pai. Mesmo assim, usar @CollectionOfElements, com ou sem @JoinColumn, é uma das maneiras mais preguiçosas de se armazenar um array de Strings. Eu gosto, rsrsrsrs