[Resolvido]Como mapear List<String>

22 respostas
Rafael_Guerreiro

Olá pessoal!

Eu estou com um problema:
Presico mapear um List<String> então vi na documentação dessa forma:

@ElementCollection private List&lt;String&gt; listaAcervos;
Mas isso não está gravando nada no banco…

22 Respostas

fernandosavio

Não entendi a relação do List com o BD…

Rafael_Guerreiro

Como assim?

Eu preciso gravar um monte de string… E elas vão estar em lista…
Mas isso não funciona, nada é salvo no banco de dados…

fernandosavio

O código que tu postou não faz nenhum conexão com banco de dados… Ele apenas diz que existe um List de Strings chamado listaAcervos que ainda não foi inicializado…
A tua dúvida é percorrer esse List ou enviar os dados do List para um BD?

Rafael_Guerreiro
Não, não, aquele é o trecho da minha @Entity, aki está ela inteira:
@Entity
@Table(name = "acv_exposicao")
public class Exposicao {
	@Id
	private Long codigo;

	@Column(nullable = false, length = 200)
	private String titulo;

	@Column(length = 1000)
	private String descricao;

	@ElementCollection
	private List&lt;String&gt; listaAcervos;

	@Column(name = "data_inicial")
	private Calendar dataInicio;

	@Column(name = "data_final")
	private Calendar dataFim;

	@ManyToOne
	private Usuarios usuarioEdicao;

	@Column(name = "data_edicao", nullable = false)
	private Calendar dataEdicao;

	@Transient
	private TipoSituacao situacao;

// getters e setters
}
fernandosavio

Ahhh… Não tenho muita experiência com frameworks cara… Vou deixar para alguém mais experiente…
Por enquanto estou aprendendo a fazer tudo na mão pra não fica mal depois…
Foi mal…

luxu

vou vc usa JDBC ou um dos frameworks de persistência de dados(JPA, Hibernate, EclipseLink) sem isso nunca vc gravará num BD, pelo menos q eu saiba…

Rafael_Guerreiro

Eu uso Hibernate…

Isso não salva?

luxu

posta ae entaum como vc manda pro hibernate…

Rafael_Guerreiro

Eu só populo a List de String e dou session.save();

Eu estou com problemas para inserir isso no banco.
Eu não queria ter que criar uma Classe para poder fazer um mapeamento MTM tendo somente uma única string nele.

luxu

amigo vc está perdido nas idéias do hibernate o q ele salva é uma classe tipow

public void salvar(T bean) {
		session.save(bean);
		}
	}

nesse caso o T bean é genérico ou seja tenho 10 tabelas e esse genérico salva todas no BD.

Rafael_Guerreiro

Moço.

Eu tenho uma classe chamada Exposicao, ela tem como atributo que é uma Lista de String. Aqui está o código da classe (VO ou Modelo de tabela, como vc preferir):
@Entity
@Table(name = "acv_exposicao")
public class Exposicao {
	@Id
	private Long codigo;

	@Column(nullable = false, length = 200)
	private String titulo;

	@Column(length = 1000)
	private String descricao;

	@ElementCollection
	private List&lt;String&gt; listaAcervos;

	@Column(name = "data_inicial")
	private Calendar dataInicio;

	@Column(name = "data_final")
	private Calendar dataFim;

	@ManyToOne
	private Usuarios usuarioEdicao;

	@Column(name = "data_edicao", nullable = false)
	private Calendar dataEdicao;

	@Transient
	private TipoSituacao situacao;
// getters e setters
}
Então, através de um formulário WEB eu preencho todos os atributos e valido se está tudo certo. Quando eu vou salvar no banco de dados, através do método abaixo (Perceba que eu persisto a Exposicao, e não a Lista, mas eu preciso gravar os dados que estão naquela lista):
public void adicionar(Exposicao exposicao) throws Exception {
		try {
			exposicao.setCodigo(controleId.getNovoId(session, Exposicao.class));

			this.formatarAtributos(exposicao);

			session.getTransaction().begin();
			session.save(exposicao);
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			throw e;
		}
	}
Dessa forma, a inserção ocorre muito bem, porém, ele não salva dado nenhum do meu Atributo List<String> listaAcervos; da Classe Exposicao.
luxu

e como está seu relacionamento? Está List tem alguma referência na tabela? Ou ela vem de outra tabela?

Rafael_Guerreiro

É só uma lista de String, eu quero salvar um monte de Strings, eu não quero ter que criar uma classe que vai conter somente a String nela.

luxu

a sua tabela no banco tem algum campo pra essa string?

Rafael_Guerreiro

Eu não crio as tabelas no Banco de Dados, eu deixo o Hibernate criá-las para mim. Portanto, como ele não está salvando nada la, não tenho tabela nenhuma.

luxu

vc conferiu se pelo menos criou o banco?

Rafael_Guerreiro

Criou tudo diretinho, menos um campo para essa lista.

luxu

por isso q naum salva, num tem o campo lá…pra q serve essa anotação?[strong]@ElementCollection[/strong]

Rafael_Guerreiro

Teoricamente essa é a anotação que permitiria que eu persistisse uma lista de String.

luxu

sinceramente naum sei se vc vai conseguir salvar essa lista de string, pq vc só consegue salvar uma List de algo qdo se tem uma relação entre 2 ou mais tabelas OU salvar uma string pra cada código tipow cod=1 lista=“tralalá”, cod=2, lista=“pataká” e assim vai axo…

Rafael_Guerreiro

Consegui.

Só foi preciso um ajuste na annotation:

@ElementCollection(fetch = FetchType.LAZY) private List&lt;String&gt; listaAcervos;

Dessa forma, funciona, certinho.

J

Caro Rafael Guerreiro,

Como você definiu o tipo do campo do banco de dados?

Grato,

Zé Felipe

Criado 27 de setembro de 2011
Ultima resposta 11 de out. de 2011
Respostas 22
Participantes 4