Galera, já sei qual é o problema porém não sei exatamente como resolvê-lo, pesquisando encontrei situações semelhantes porém das resoluções que achei nenhuma me satisfez, me perdoem desde já caso eu diga alguma besteira :lol: então vamos lá:
tenho 2 classes, NivelUsuario e Usuario, seguem as mesmas abaixo:
NivelUsuario.java
@Entity(name="NivelUsuarioBean")
@Table(name="tabNivelUsuario")
public class NivelUsuario extends ValidatorForm {
private static final long serialVersionUID = 2345678;
private String nome,descricao;
private long id;
public NivelUsuario() {
}
@Id
@GeneratedValue
@Column(name="idNivelUsuario")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name="strNome", nullable = false, unique = true, length = 50)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name="strDescricao", nullable = true, length = 500)
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Override
public String toString() {
return id + " | " + nome + " | " + descricao;
}
}
Usuario.java
@Entity(name="UsuarioBean")
@Table(name="tabUsuario")
public class Usuario extends ValidatorForm {
private static final long serialVersionUID = 2345678;
private String usuario,senha,email;
private long id;
private NivelUsuario nivelUsuario;
public Usuario() {
}
public Usuario(String usuario, String senha, String email) {
this.usuario = usuario;
this.senha = senha;
this.email = email;
}
public Usuario(long id, String usuario, String senha, String email) {
this.id = id;
this.usuario = usuario;
this.senha = senha;
this.email = email;
}
@Id
@GeneratedValue
@Column(name="intIdUsuario")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name="strUsuario", nullable = false, unique = true)
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
@Column(name="strSenha", nullable = false)
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@Column(name="strEmail", nullable = false)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@ManyToOne(cascade = CascadeType.ALL)
public NivelUsuario getNivelUsuario() {
return nivelUsuario;
}
public void setNivelUsuario(NivelUsuario nivelUsuario) {
this.nivelUsuario = nivelUsuario;
}
@Override
public String toString() {
return id + " | " + usuario + " | " + senha + " | " + email;
}
}
Eis a minha dúvida, o CRUD funciona perfeitamente na classe NivelUsuario, o problema é que, ao tentar persistir um registro da classe Usuario, ela tem um relacionamento do tipo N:1 com a classe NivelUsuario, o struts ao tentar instanciar o ActionForm causa type mismatch pois listo os niveis de usuário por uma combobox e jogo o id dos mesmos no value da mesma, como podem ver logo abaixo:
<html:select property="nivelUsuario" value="${atual.nivelUsuario}" errorStyleClass="erroHighlight"
errorKey="org.apache.struts.action.ERROR" styleClass="validate[required]" styleId="nivelUsuario">
<html:option value="">Selecionar</html:option>
<html:options collection="listaNiveisUsuario" property="id" labelProperty="nome"/>
</html:select>
então a pergunta é a seguinte, como fazer para de uma combobox, o struts inserir um objeto dentro de outro?
pensei em encapsular tal ação alterando o getter e o setter de NivelUsuario dentro da classe Usuario mas a idéia não está bem formulada na minha cabeça ainda, pois não faz muito sentido(pelo menos do jeito que pensei), “enganar” o struts passando um int para o setter(e pelo get do hibernate ele encontra e instancia o NivelUsuario), e retornando o id do usuário pelo getter sendo que precisarei novamente do objeto em si, repitindo, perdão se falei alguma besteira pois estou aprendendo, agradeço desde já!
OBS: editarei o post assim que encontrar a solução.