Dúvida em persistencia com Hibernate

2 respostas
Pedro_Damaso

Olá pessoal,

Estou com a seguinte dúvida: Tenho que persistir uma FAMILIA está possui um Set que possui relacionamento com GruposComunitarios, está é uma tabela descritiva que por ela são gerados checkboxes dinamicos na parte web, então no meu controlador eu recebo uma lista de checkboxes marcados, então tenho que adicionar cada item da lista no Set. Segue a imagem do relacionamento.
[IMG]http://img713.imageshack.us/img713/6266/grupoo.jpg[/IMG]

Familia:
@Entity
@Table(name = "Familia")
public class Familia implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	@Column(name="idFamilia", nullable=false)
	private Integer idFamilia;
	
	@NotNull(message="O campo Código da Familia não pode ser vazio.")
	@Column(name="codigoFamilia", nullable=false)
	private Integer codigoFamilia;
	
	@NotNull(message="O campo Data do Cadastro não pode ser vazio.")
	@Column(name="dataCadastro", nullable=false)
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;	
	
	@OneToMany(fetch = FetchType.EAGER, mappedBy = "Familia")
	private Set<GruposComunitariosFamilia> GruposComunitariosFamilia;
}
GruposComunitariosFamilia:
@Entity
@Table(name = "GruposComunitariosFamilia")
public class GruposComunitariosFamilia implements Serializable{

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name="idGruposComunitariosFamilia", nullable=false)
	private Short idGruposComunitariosFamilia;

	@Size(message="O campo outrosEspecificar deve ter no maximo {max} caracteres",min = 0,max = 30)
	@Column(name="outrosEspecificar", nullable=true,length = 30)
	private String outrosEspecificar;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumns({
	@JoinColumn(name ="idGruposComunitarios" ,referencedColumnName ="idGruposComunitarios", nullable =true )})
	@ForeignKey(name="FK_GruposComunitariosFamilia_GruposComunitarios")
	private GruposComunitarios GruposComunitarios;

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumns({
	@JoinColumn(name ="idFamilia" ,referencedColumnName ="idFamilia", nullable =true )})
	@ForeignKey(name="FK_GruposComunitariosFamilia_Familia")
	private Familia Familia;
}

No meu controlador está o problema eu estou conseguindo persistir a familia porem o Set não está sendo persistido da maneiro como criei no controlador, se alguem puder ajudar a ver o que está errado no controlador agradeço.

Controlador:
@Post
	public void dadosFamilia(Familia familia, List<GruposComunitarios> GruposComunitariosFamilia){
	
		Set<GruposComunitariosFamilia> tmp = new HashSet<GruposComunitariosFamilia>();
		
		for (GruposComunitarios m : GruposComunitariosFamilia) {
			GruposComunitariosFamilia f = new GruposComunitariosFamilia();
			f.setFamilia(familia);	
			f.setGruposComunitarios(m);
			tmp.add(f);
			familia.setGruposComunitariosFamilia(tmp);
		}
		
		validator.validate(familia);
		
		validator.onErrorForwardTo(TemplateController.class).erros();
		
		RequestAction requestAction = verificaAcao(familia);
		
		Set<String> erro = familiaApplication.salvarFamilia(familia,requestAction);
		

		if(erro != null){
			 result.use(Results.json()).from(new MessageJson(erro, "error")).serialize();
		}
		else{
			
			result.use(Results.json()).from(new MessageJson("Familia salvo com sucesso", "success","/familia/cadastrarFamilia/"+familia.getIdFamilia())).serialize();
		}
			
	}

Se alguem puder ajudar desde já agradeço ... :thumbup:

2 Respostas

rsaraiva

Fala Pedro!

Creio que você precisa configurar o cascade pra lista salvar automaticamente.

Experimenta incluir um cascade=CascadeType.ALL no @OneToMany da linha 21 da classe Familia.

Rubens

Pedro_Damaso

Obrigadão pela ajuda Rubens. :thumbup:

Resolveu boa parte dos meus problemas, porém ainda está me apresentando alguns problemas quando faço a validação de familia, mas de toda forma fico grato pela ajuda … :smiley:

Criado 11 de janeiro de 2012
Ultima resposta 11 de jan. de 2012
Respostas 2
Participantes 2