Boa tarde pessoal!
Estamos desenvolvendo um novo projeto aqui na empresa. Estamos utilizando Jsf 2, RichaFaces 4, Spring 3, Hibernate e Hibernate Validator.
Tenho a seguinte classe de domínio:
@Component
@Entity
public class Usuario {
@Id
@GeneratedValue()
private int id;
@NotBlank(message = "Nome: {value.notNull}")
@NotNull(message = "Nome: {value.notNull}")
@Column(nullable = false, length = 120)
private String nome;
@NotBlank(message = "Senha: {value.notNull}")
@NotNull(message = "Senha: {value.notNull}")
@Column(nullable = false)
private String senha;
@NotBlank(message = "Nome: {value.notNull}")
@NotNull(message = "Nome: {value.notNull}")
@Column(nullable = false, unique = true)
private String login;
@NotBlank(message = "Nome: {value.notNull}")
@NotNull(message = "Nome: {value.notNull}")
@Column(nullable = false)
@Pattern(regexp = ".+@.+\\.[a-z]+", message = "Email: {value.email.invalid}")
private String email;
@Column(nullable = false)
private boolean empresa = false;
@Valid
@Null
@ManyToOne
@JoinColumn(name = "idUsuarioResponsavel")
private Usuario responsavel;
@Valid
@Null
@ManyToOne
@JoinColumn(name = "idUsuarioTutor")
private Usuario tutor;
@Column(nullable = false)
private boolean status = false;
@ManyToMany
@JoinTable(name = "GrupoUsuario", joinColumns = { @JoinColumn(name = "idUsuario") }, inverseJoinColumns = { @JoinColumn(name = "idGrupo") })
private Set<Grupo> grupos = new HashSet<Grupo>();
@OneToMany
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "idUsuario")
private Set<AreaAtendimento> areasAtendimento = new HashSet<AreaAtendimento>();
public Usuario() {
}
O problema é o seguinte:
Tenho um Form Jsf na view para cadastro de usuarios. Quando chamo a action que insere um novo usuário no banco e este usuário não possui um tutor e/ou um responsável o hibernate validator retorna um erro de validação dizendo que o atributo nome do objeto tutor e/ou reponsável não pode ser nulo.
No método get do atributo tutor tenho o seguinte código:
public Usuario getTutor() {
if (tutor == null)
tutor = new Usuario();
return tutor;
}
Não posso instanciar o objeto tutor e/ou reponsavel na declarção…
@Null
@ManyToOne
@JoinColumn(name = "idUsuarioTutor")
private Usuario tutor = new Usuario();
…porque isto gera um loop infinito na aplicação. Tentei não instanciar o objeto tutor e/ou reponsavel no método get e na declaração do objeto mas então o Jsf gera um erro quando tenta acessar a propriedade pelo método get porque está recebendo uma referência nula.
Alguém já passou por isto?