Java:调用 setter 和 getter 时出现 org.hibernate.PropertyAccessException
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24095348/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java : org.hibernate.PropertyAccessException while calling setter and getter
提问by burning
I am building an application using in java restlet and Hibernate .
我正在构建一个使用 java restlet 和 Hibernate 的应用程序。
I have user entity class and whenever I am calling http get . I am getting the error .
我有用户实体类,每当我调用 http get 时。我收到错误。
{
"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 文件看起来像
<?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 .
请建议我这里有什么问题。是否有任何 java 版本问题或我无法弄清楚这个问题。
Mysql table looks like
Mysql表看起来像
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.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 -
采纳答案by Jens
Your idUser
is defined as a long value in db. In your Object it is a String
. Please change to Integer
.
您idUser
在 db 中定义为 long 值。在您的对象中,它是一个String
. 请改为Integer
。
回答by ConMan
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, i.e. it will assign a NUMBER which has never been used in the database, and will never be recycled.
在您的 Java @Entity User 中,idUser 字段具有注释 @GeneratedValue(strategy = GenerationType.AUTO)。这意味着 Hibernate 将生成一个在数据库级别唯一的 INTEGER 值,即它将分配一个从未在数据库中使用过的 NUMBER,并且永远不会被回收。
Because you have set idUser to the type String, you are getting the IllegalArgumentException.
因为您已将 idUser 设置为 String 类型,所以您会收到 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.
这将告诉 hibernate 使用提供的 setter 注入唯一 id,并且 setter 会将整数分配为字符串。
Hope this helps!
希望这可以帮助!
EDIT
编辑
You'll also have to change your database schema to accept the type VARCHAR for field idUser.
您还必须更改数据库架构以接受字段 idUser 的 VARCHAR 类型。