@Embeddable

7 respostas
K

Olá!!

Tenho uma classe chamada Endereco e anotada com @Embeddable, faço referência à Endereco na classe Cliente da seguinte forma:

@Embedded
private Endereco endereco = new Endereco();

Até aí tudo bem, o problema é que em Endereco eu tenho o seguinte:

private Cidade cidade = new Cidade();
private Estado estado = new Estado();

E quando eu salvo um cliente, os campos cidade e estado (que são combos) estão sendo salvos com um tipo de dado chamado Blob sendo que na página xhtml eu peço para ser salvo o código da cidade e estado.

O que pode estar acontecendo?

Obrigada.

Karina

7 Respostas

Rodrigo_Sasaki

como estão mapeados esses campos no banco? eles não deveriam ser Blob, correto ?

K

Não deveria ser Blob, pois nas classes Estado e Cidade eu tenho o seguinte mapeamento:

public class Estado implements Serializable{

	@Id
	@GeneratedValue
	@Column(name = "cod_estado")
	private Integer codigo;

	@Column(name = "sigla_estado", length=2, nullable=false)
	private String sigla;

	@Column(name = "nome_estado", length=50, nullable=false)
	private String nome;
public class Cidade implements Serializable {
        @Id
	@GeneratedValue
	@Column(name = "cod_cidade")
	private Integer codigo;

	@ManyToOne
	@Cascade(CascadeType.ALL)
	@JoinColumn(name = "cod_estado", nullable = false)
	private Estado estado;

	@Column(name = "nome_cidade", length = 50, nullable = false)
	private String nome;
Rodrigo_Sasaki

E no banco de dados? qual o tipo da coluna ?

K

Nas tabelas estado e cidade eu tenho int e varchar, mas na tabela cliente no campo estado e cidade aparece como tinyblob…

Rodrigo_Sasaki

Eu acho que seu problema está aí, a sua aplicação está persistindo o dado de acordo com a estrutura da tabela, se quer que a FK seja mapeada pela PK da outra tabela, você vai ter que mexer na estrutura.

tveronezi

E quando eu salvo um cliente, os campos cidade e estado (que são combos) estão sendo salvos com um tipo de dado chamado Blob sendo que na página xhtml eu peço para ser salvo o código da cidade e estado.

Isto é esperado quando a gente usa “@Embedded”.
Quando o container vê um campo anotado com isso, ele vai fazer a serialização do objeto (no caso, endereco) pra poder salvá-lo num campo binário (o campo blob).

K

Faltou mesmo parte do mapeamento na classe Endereco…era isso…

Obrigada!!

Criado 27 de agosto de 2012
Ultima resposta 27 de ago. de 2012
Respostas 7
Participantes 3