1

晚安,

在我的应用程序中,我通过 Hibernate 访问我的数据库。我想从用户发送 JSON 数据

涉及hibernate表(User)的代码如下:

<hibernate-mapping>
<class name="modelos.Usuario" table="usuario" catalog="mydb">
    <id name="login" type="string">
        <column name="login" length="20" />
        <generator class="assigned" />
    </id>
    <many-to-one name="rol" class="modelos.Rol" fetch="join">
        <column name="Rol_idRol" not-null="true" />
    </many-to-one>
    <property name="password" type="string">
        <column name="password" length="32" />
    </property>
    <property name="nombre" type="string">
        <column name="nombre" length="45" />
    </property>
    <property name="apellidos" type="string">
        <column name="apellidos" length="45" />
    </property>
    <property name="dni" type="string">
        <column name="dni" length="10" />
    </property>
    <property name="direccion" type="string">
        <column name="direccion" length="60" />
    </property>
    <property name="numero" type="string">
        <column name="numero" length="5" />
    </property>
    <property name="poblacion" type="string">
        <column name="poblacion" length="45" />
    </property>
    <property name="cp" type="string">
        <column name="cp" length="5" />
    </property>
    <property name="provincia" type="string">
        <column name="provincia" length="30" />
    </property>
    <property name="email" type="string">
        <column name="email" length="60" />
    </property>
    <property name="telefono" type="string">
        <column name="telefono" length="15" />
    </property>
    <set name="reunions" table="reunion" inverse="true" lazy="false" fetch="join">
        <key>
            <column name="Perfil_login" length="20" not-null="true" />
        </key>
        <one-to-many class="modelos.Reunion" />
    </set>
    <set name="cuentas" table="cuenta" inverse="true" lazy="false" fetch="join">
        <key>
            <column name="usuario_login" length="20" not-null="true" />
        </key>
        <one-to-many class="modelos.Cuenta" />
    </set>
    <set name="sesions" table="sesion" inverse="true" lazy="false" fetch="join">
        <key>
            <column name="usuario_login" length="20" not-null="true" />
        </key>
        <one-to-many class="modelos.Sesion" />
    </set>
</class>

并生成以下 Java 代码:

package modelos;

// 由 Hibernate Tools 3.4.0.CR1 于 19-abr-2012 18:48:54 生成

导入 java.util.HashSet;导入 java.util.Set;

/** * hbm2java 生成的 Usuario */ public class Usuario implements java.io.Serializable {

 private String login;
 private Rol rol;
 private String password;
 private String nombre;
 private String apellidos;
 private String dni;
 private String direccion;
 private String numero;
 private String poblacion;
 private String cp;
 private String provincia;
 private String email;
 private String telefono;
 private Set<Reunion> reunions = new HashSet<Reunion>(0);
 private Set<Cuenta> cuentas = new HashSet<Cuenta>(0);
 private Set<Sesion> sesions = new HashSet<Sesion>(0);

public Usuario() {
}


public Usuario(String login, Rol rol) {
    this.login = login;
    this.rol = rol;
}
public Usuario(String login, Rol rol, String password, String nombre, String apellidos, String dni, String direccion, String numero, String poblacion, String cp, String provincia, String email, String telefono, Set<Reunion> reunions, Set<Cuenta> cuentas, Set<Sesion> sesions) {
   this.login = login;
   this.rol = rol;
   this.password = password;
   this.nombre = nombre;
   this.apellidos = apellidos;
   this.dni = dni;
   this.direccion = direccion;
   this.numero = numero;
   this.poblacion = poblacion;
   this.cp = cp;
   this.provincia = provincia;
   this.email = email;
   this.telefono = telefono;
   this.reunions = reunions;
   this.cuentas = cuentas;
   this.sesions = sesions;
}

public String getLogin() {
    return this.login;
}

public void setLogin(String login) {
    this.login = login;
}
public Rol getRol() {
    return this.rol;
}

public void setRol(Rol rol) {
    this.rol = rol;
}
public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}
public String getNombre() {
    return this.nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}
public String getApellidos() {
    return this.apellidos;
}

public void setApellidos(String apellidos) {
    this.apellidos = apellidos;
}
public String getDni() {
    return this.dni;
}

public void setDni(String dni) {
    this.dni = dni;
}
public String getDireccion() {
    return this.direccion;
}

public void setDireccion(String direccion) {
    this.direccion = direccion;
}
public String getNumero() {
    return this.numero;
}

public void setNumero(String numero) {
    this.numero = numero;
}
public String getPoblacion() {
    return this.poblacion;
}

public void setPoblacion(String poblacion) {
    this.poblacion = poblacion;
}
public String getCp() {
    return this.cp;
}

public void setCp(String cp) {
    this.cp = cp;
}
public String getProvincia() {
    return this.provincia;
}

public void setProvincia(String provincia) {
    this.provincia = provincia;
}
public String getEmail() {
    return this.email;
}

public void setEmail(String email) {
    this.email = email;
}
public String getTelefono() {
    return this.telefono;
}

public void setTelefono(String telefono) {
    this.telefono = telefono;
}
public Set<Reunion> getReunions() {
    return this.reunions;
}

public void setReunions(Set<Reunion> reunions) {
    this.reunions = reunions;
}
public Set<Cuenta> getCuentas() {
    return this.cuentas;
}

public void setCuentas(Set<Cuenta> cuentas) {
    this.cuentas = cuentas;
}
public Set<Sesion> getSesions() {
    return this.sesions;
}

public void setSesions(Set<Sesion> sesions) {
    this.sesions = sesions;
}

}

执行用户更新的 servlet 具有以下代码:

        if (opcion.equals("4")){

        response.setContentType("text/html");

        Rol rol = new Rol();

        String usuario = request.getParameter("login");
        Usuario user = facade.getUsuarioByLogin(usuario);

        String nombre= user.getNombre();
        String apellidos = user.getApellidos();
        String dni = user.getDni();
        String telefono = user.getTelefono();
        String email = user.getEmail();
        String direccion = user.getDireccion();
        String numero = user.getNumero();
        String poblacion = user.getPoblacion();
        String cp = user.getCp();
        String provincia = user.getProvincia();
        String login = user.getLogin();
        String contraseña = user.getPassword();
        rol = user.getRol();


        System.out.println("El valor de Nombre es"+nombre);

        //System.out.println("Opcion 4 El valor de rol es"+rol);

        JSONObject jsonObject1 = new JSONObject();
        jsonObject1.put("name", nombre);
        jsonObject1.put("apellidos", apellidos);
        jsonObject1.put("dni", dni);
        jsonObject1.put("telefono", telefono);
        jsonObject1.put("email", email);
        jsonObject1.put("direccion", direccion);
        jsonObject1.put("numero",numero);
        jsonObject1.put("poblacion", poblacion);
        jsonObject1.put("cp", cp);
        jsonObject1.put("provincia", provincia);
        jsonObject1.put("login", login);
        jsonObject1.put("pass", contraseña);

        jsonObject1.put("rol", rol);

运行应用程序时出现以下错误:

net.sf.json.JSONException:层次结构中有一个循环!在 net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97) 在 net.sf.json.JSONObject._fromBean(JSONObject.java:857) 在 net.sf.json.JSONObject.fromObject(JSONObject .java:192) 在 net.sf.json.JSONObject._processValue(JSONObject.java:2774) 在 net.sf.json.JSONObject._setInternal(JSONObject.java:2798) 在 net.sf.json.JSONObject.setValue( JSONObject.java:1507) 在 net.sf.json.JSONObject._fromBean(JSONObject.java:940) 在 net.sf.json.JSONObject.fromObject(JSONObject.java:192) 在 net.sf.json.JSONArray._processValue (JSONArray.java:2557) 在 net.sf.json.JSONArray.processValue(JSONArray.java:2588) 在 net.sf.json.JSONArray.addValue(JSONArray.java:2575) 在 net.sf.json.JSONArray。 在 servlet.UsuarioServlet.doPost(UsuarioServlet.java:195)

粗体错误行是上面粘贴的 servlet 代码中出现的最后一行。“jsonObject1.put('rol', rol);”

我究竟做错了什么?

谢谢!

编辑:

Rol类的代码如下:

package modelos;

// 由 Hibernate Tools 3.4.0.CR1 于 19-abr-2012 18:48:54 生成

导入 java.util.HashSet;导入 java.util.Set;

/** * hbm2java 生成的 Rol */ public class Rol 实现 java.io.Serializable {

 private int idRol;
 private String nombre;
 private Boolean isAdmin;
 private Set<Usuario> usuarios = new HashSet<Usuario>(0);

public Rol() {
}


public Rol(int idRol) {
    this.idRol = idRol;
}
public Rol(int idRol, String nombre, Boolean isAdmin, Set<Usuario> usuarios) {
   this.idRol = idRol;
   this.nombre = nombre;
   this.isAdmin = isAdmin;
   this.usuarios = usuarios;
}

public int getIdRol() {
    return this.idRol;
}

public void setIdRol(int idRol) {
    this.idRol = idRol;
}
public String getNombre() {
    return this.nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}
public Boolean getIsAdmin() {
    return this.isAdmin;
}

public void setIsAdmin(Boolean isAdmin) {
    this.isAdmin = isAdmin;
}
public Set<Usuario> getUsuarios() {
    return this.usuarios;
}

public void setUsuarios(Set<Usuario> usuarios) {
    this.usuarios = usuarios;
}

}

该代码由 Hibenate 生成为 Usuario 代码。

xml如下:

<hibernate-mapping>
<class name="modelos.Rol" table="rol" catalog="mydb">
    <id name="idRol" type="int">
        <column name="idRol" />
        <generator class="assigned" />
    </id>
    <property name="nombre" type="string">
        <column name="Nombre" length="45" />
    </property>
    <property name="isAdmin" type="java.lang.Boolean">
        <column name="isAdmin" />
    </property>
    <set name="usuarios" table="usuario" inverse="true" lazy="false" fetch="select">
        <key>
            <column name="Rol_idRol" not-null="true" />
        </key>
        <one-to-many class="modelos.Usuario" />
    </set>
</class>

4

1 回答 1

1

在您粘贴的代码中,没有“Rol”类或表定义?

于 2012-06-18T21:48:23.127 回答