简体   繁体   中英

Java : org.hibernate.PropertyAccessException while calling setter and getter

I am building an application using in java restlet and Hibernate .

I have user entity class and whenever I am calling http get . I am getting the error .

{
    "error": "20000:Hibernate Exception. : org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of tecd.persistence.entity.User.idUser",
    "status": 500
}

Here Is my entity class .

package tecd.persistence.entity;

import java.io.Serializable;
import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.json.JSONObject;

/**
 * @author Rohit
 * 
 */
@Entity
@Table(name = "user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "iduser", nullable = false, unique = true, length = 255)
    private String idUser;

    @Column(name = "name", nullable = true, length = 255)
    private String name;

    @Column(name = "username", nullable = false,unique = true, length = 255)
    private String userName;

    @Column(name = "password", nullable = false, length = 255)
    private String password;


    @Column(name = "contactFirstName", nullable = true, length = 255)
    private String contactFirstName;

    @Column(name = "contactLastName", nullable = true, length = 255)
    private String contactLastName;

    @Column(name = "contactEmail", nullable = true, length = 255)
    private String contactEmail;

    @Column(name = "contactMobile", nullable = true, length = 32)
    private String contactMobile;

    @Column(name = "contactPhone", nullable = true, length = 32)
    private String contactPhone;

    @Column(name = "contactAddress", nullable = true, columnDefinition = "MEDIUMTEXT")
    private String contactAddress;

    @Column(name = "status", nullable = false)
    private Integer status;

    @Column(name = "type", nullable = false)
    private Integer type;

    @Column(name = "createdDT", nullable = false)
    private Timestamp createdDate;

    @Column(name = "updatedDT", nullable = true)
    private Timestamp updatedDate;


    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("idUser = ").append(this.idUser).append(",");
        sb.append("name = ").append(this.name).append(",");

        sb.append("username = ").append(this.userName).append(",");
        sb.append("password = ").append(this.password).append(",");

        sb.append("contactAddress = ").append(this.contactAddress).append(",");
        sb.append("contactEmail = ").append(this.contactEmail).append(",");
        sb.append("status = ").append(this.status).append(",");
        sb.append("type = ").append(this.type).append(",");
        sb.append("contactFirstName = ").append(this.contactFirstName)
                .append(",");
        sb.append("contactLastName = ").append(this.contactLastName)
                .append(",");
        sb.append("contactPhone = ").append(this.contactPhone).append(",");
        sb.append("contactMobile = ").append(this.contactMobile).append(",");
        sb.append("createdDate = ").append(this.createdDate).append(",");
        sb.append("updatedDate = ").append(this.updatedDate);
        return sb.toString();
    }

    public JSONObject toJSON() {

        try {
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("iduser", this.idUser);
            jsonObj.put("username", this.userName);
            jsonObj.put("password", this.password);
            jsonObj.put("createdDate", this.createdDate);
            jsonObj.put("status", this.status.toString());
            jsonObj.put("type", this.type.toString());

            // These fields may have null values
            if (this.name != null)
                jsonObj.put("name", setValue(this.name));
            if (this.contactFirstName != null)
                jsonObj.put("contactFirstName", setValue(this.contactFirstName));
            if (this.contactLastName != null)
                jsonObj.put("contactLastName", setValue(this.contactLastName));
            if (this.contactAddress != null)
                jsonObj.put("contactAddress", setValue(this.contactAddress));
            if (this.contactPhone != null)
                jsonObj.put("contactPhone", setValue(this.contactPhone));
            if (this.contactMobile != null)
                jsonObj.put("contactMobile", setValue(this.contactMobile));
            if (this.contactEmail != null)
                jsonObj.put("contactEmail", setValue(this.contactEmail));
            if (this.updatedDate != null)
                jsonObj.put("updatedDate", setValue(this.updatedDate));
            if (this.contactPhone != null)
                jsonObj.put("contactPhone", setValue(this.contactPhone));
            if (this.contactAddress != null)
                jsonObj.put("contactAddress", setValue(this.contactAddress));
            System.out.println("business JSON object"+jsonObj);
            return jsonObj;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public Object setValue(Object input) {

        Object fieldValue = ((input == null) ? JSONObject.NULL.toString()
                : input);
        return fieldValue;
    }

     public String getPassword() {
         return password;
     }

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


    public String getUserName() {
        return userName ;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }



    public String getidUser() {
        return idUser;
    }

    public void setidUser(String idUser) {
        this.idUser = idUser;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getContactFirstName() {
        return contactFirstName;
    }

    public void setContactFirstName(String contactFirstName) {
        this.contactFirstName = contactFirstName;
    }

    public String getContactLastName() {
        return contactLastName;
    }

    public void setContactLastName(String contactLastName) {
        this.contactLastName = contactLastName;
    }

    public String getContactEmail() {
        return contactEmail;
    }

    public void setContactEmail(String contactEmail) {
        this.contactEmail = contactEmail;
    }

    public String getContactMobile() {
        return contactMobile;
    }

    public void setContactMobile(String contactMobile) {
        this.contactMobile = contactMobile;
    }

    public String getContactPhone() {
        return contactPhone;
    }

    public void setContactPhone(String contactPhone) {
        this.contactPhone = contactPhone;
    }

    public String getContactAddress() {
        return contactAddress;
    }

    public void setContactAddress(String contactAddress) {
        this.contactAddress = contactAddress;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Timestamp getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Timestamp createdDate) {
        this.createdDate = createdDate;
    }

    public Timestamp getUpdatedDate() {
        return updatedDate;
    }

    public void setUpdatedDate(Timestamp updatedDate) {
        this.updatedDate = updatedDate;
    }

}

And respective xml file looks like

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="tecd.persistence.entity.User" table="user">    
    <id name="idUser" type="long" unsaved-value="null">
        <column name="idUser" not-null="true"/>
        <generator class="identity"/>
    </id>
        <property name="userName">
            <column name="username" not-null="true" />
        </property>
        <property name="password">
            <column name="password" not-null="true" />
        </property>     
        <property name="status">
            <column name="status" not-null="true" />
        </property>
        <property name="type">
            <column name="type" not-null="true" />
        </property>
        <property name="createdDate">
            <column name="createdDT" not-null="true" />
        </property>
        <property name="updatedDate">
            <column name="updatedDT" not-null="false" />
        </property>
        <property name="name">
            <column name="name" length="255" not-null="false" />
        </property>
        <property name="contactFirstName">
            <column name="contactFirstName" length="255" not-null="false" />
        </property>
        <property name="contactLastName">
            <column name="contactLastName" length="255" not-null="false" />
        </property>
        <property name="contactEmail">
            <column name="contactEmail" length="255" not-null="false" />
        </property>
        <property name="contactMobile">
            <column name="contactMobile" length="32" not-null="false" />
        </property>     
        <property name="contactPhone">
            <column name="contactPhone" length="32" not-null="false" />
        </property>     
        <property name="contactAddress">
            <column name="contactAddress" not-null="false" />
        </property>     

    </class>
</hibernate-mapping>

Please suggest me what is the problem here .Is there any java version issue or what I am not able to figure out this issue .

Mysql table looks like

CREATE TABLE `user` (
  `idUser` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `contactFirstName` varchar(255) DEFAULT NULL,
  `contactLastName` varchar(255) DEFAULT NULL,
  `contactEmail` varchar(255) DEFAULT NULL,
  `contactMobile` varchar(32) DEFAULT NULL,
  `contactPhone` varchar(32) DEFAULT NULL,
  `contactAddress` mediumtext,
  `status` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  `createdDT` datetime NOT NULL,
  `updatedDT` datetime DEFAULT NULL,
  PRIMARY KEY (`idUser`)
)

Error :

org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of tecd.persistence.entity.User.idUser
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setIdentifier(AbstractEntityTuplizer.java:211)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:353)
    at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3600)
    at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1275)
    at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1264)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1290)
    at org.hibernate.loader.Loader.getRow(Loader.java:1197)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:568)
    at org.hibernate.loader.Loader.doQuery(Loader.java:689)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    at org.hibernate.loader.Loader.doList(Loader.java:2211)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
    at org.hibernate.loader.Loader.list(Loader.java:2090)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at tecd.persistence.UserDAO.viewUser(UserDAO.java:53)
    at tecd.resource.UserResource.viewUser(UserResource.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.restlet.resource.ServerResource.doHandle(ServerResource.java:503)
    at org.restlet.resource.ServerResource.get(ServerResource.java:707)
    at org.restlet.resource.ServerResource.doHandle(ServerResource.java:589)
    at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:649)
    at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
    at org.restlet.resource.ServerResource.handle(ServerResource.java:952)
    at org.restlet.resource.Finder.handle(Finder.java:246)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Router.doHandle(Router.java:431)
    at org.restlet.routing.Router.handle(Router.java:648)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
    at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84)
    at org.restlet.Application.handle(Application.java:381)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Router.doHandle(Router.java:431)
    at org.restlet.routing.Router.handle(Router.java:648)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Router.doHandle(Router.java:431)
    at org.restlet.routing.Router.handle(Router.java:648)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.routing.Filter.doHandle(Filter.java:159)
    at org.restlet.routing.Filter.handle(Filter.java:206)
    at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
    at org.restlet.Component.handle(Component.java:392)
    at org.restlet.Server.handle(Server.java:516)
    at org.restlet.engine.connector.ServerConnectionHelper.handle(ServerConnectionHelper.java:257)
    at org.restlet.engine.connector.ServerConnectionHelper.doHandleInbound(ServerConnectionHelper.java:186)
    at org.restlet.engine.connector.BaseHelper$2.run(BaseHelper.java:593)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
    ... 69 more
2014-06-08  13:51:11    0:0:0:0:0:0:0:1 -   -   8100    GET /TECDRestService/user/Arohit    -   500 -   0   1907    http://localhost:8100   Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0    -

Your idUser is defined as a long value in db. In your Object it is a String . Please change to Integer .

In your Java @Entity User, the idUser field has the annotation @GeneratedValue(strategy = GenerationType.AUTO). This means that Hibernate will generate a INTEGER value unique at the database level, ie it will assign a NUMBER which has never been used in the database, and will never be recycled.

Because you have set idUser to the type String, you are getting the IllegalArgumentException.

Consider the following code:

@GeneratedValue(strategy = GenerationType.AUTO)
public void setIdUser(int idUser){
    this.idUser = "" + idUser;
}

public String getIdUser(){
    return this.idUser;
}

This will tell hibernate to inject the unique id using the setter provided, and the setter will assign the integer as a String.

Hope this helps!

You'll also have to change your database schema to accept the type VARCHAR for field idUser.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM