首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在联系人实体中将位置模型设置为null

无法在联系人实体中将位置模型设置为null
EN

Stack Overflow用户
提问于 2015-01-20 07:08:52
回答 2查看 56关注 0票数 0

我正在开发一个spring应用程序,其中我有两个模型类。以下是我的模型课程:

代码语言:javascript
复制
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name="Contact")
public class ContactModel {

    @Id
    @Column(name="contactid")
    @GeneratedValue
    private int contactId;

    @Column(name="contactname")
    private String contactName;

    @Column(name="contactemail")
    private String email;

    @Column(name="contactphone")
    private String phone;

    @ManyToOne
    @JoinColumn(name="locationid")
    private LocationModel locationModel;

    public LocationModel getLocationModel() {
        return locationModel;
    }
    public void setLocationModel(LocationModel locationModel) {
        this.locationModel = locationModel;
    }
    public int getContactId() {
        return contactId;
    }
    public void setContactId(int contactId) {
        this.contactId = contactId;
    }
    public String getContactName() {
        return contactName;
    }
    public void setContactName(String contactName) {
        this.contactName = contactName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

和LocationModel

代码语言:javascript
复制
import java.util.List;

//import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Cascade;

@Entity
@Table(name="Location")
public class LocationModel {

    @Id
    @Column(name="locationid")
    @GeneratedValue 
    private int locationId;

    @Column(name="locationname")
    private String locationName;

    @Column(name="locationdesc")
    private String locationDescription;

    @Column(name="type")
    private String locationType;

    @Column(name="address")
    private String address;

    @Column(name="city")
    private String city;

    @Column(name="state")
    private String state;

    @Column(name="district")
    private String district;

    @Column(name="lattitude")
    private String lattitude;

    @Column(name="longitude")
    private String longitude;

    @OneToMany(mappedBy = "locationModel")
    private List<ContactModel> contactList;

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getLattitude() {
        return lattitude;
    }

    public void setLattitude(String lattitude) {
        this.lattitude = lattitude;
    }

    public String getLongitude() {
        return longitude;
    }

    public void setLongitude(String longitude) {
        this.longitude = longitude;
    }

    public String getLocationType() {
        return locationType;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getDistrict() {
        return district;
    }

    public void setDistrict(String district) {
        this.district = district;
    }

    public void setLocationType(String locationType) {
        this.locationType = locationType;
    }

    public int getLocationId() {
        return locationId;
    }

    public void setLocationId(int locationId) {
        this.locationId = locationId;
    }

    public String getLocationName() {
        return locationName;
    }

    public void setLocationName(String locationName) {
        this.locationName = locationName;
    }

    public String getLocationDescription() {
        return locationDescription;
    }

    public void setLocationDescription(String locationDescription) {
        this.locationDescription = locationDescription;
    }
}

在删除位置时,我希望将相应联系人的位置设置为null。为此,我使用以下代码:

代码语言:javascript
复制
public void selLocationToNull(int locationId) throws Exception {
        try {
            logger.info("deleteContact() begins:");
            Session session = sessionFactory.getCurrentSession();
            Query query = session.createQuery("update ContactModel set locationModel=:newLocation where locationModel=:locationId");
            query.setParameter("newLocation", null);
            query.setParameter("locationId", locationId);
            query.executeUpdate();
            logger.info("null update query executed...");
        } catch (Exception e) {
            logger.debug("Error while updating location to null: "
                    + e.getMessage());
            throw e;
        } finally {
        }
    }

我觉得这是个例外:

代码语言:javascript
复制
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.bizmerlin.scm.model.LocationModel.locationId

Caused by: java.lang.IllegalArgumentException: Can not set int field com.bizmerlin.scm.model.LocationModel.locationId to java.lang.Integer

我在我的locationId类中为LocationModel提供了getter方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-20 07:14:09

如何将null设置为基本类型?通常,对实体中的字段使用包装器类型是很好的做法。

代码语言:javascript
复制
@Id
@Column(name="locationid")
@GeneratedValue 
private Integer locationId;
票数 1
EN

Stack Overflow用户

发布于 2015-01-20 07:15:14

您可以在查询的位置设置LocationModel并将其与int进行比较。SHould be

代码语言:javascript
复制
Query query = session.createQuery("update ContactModel set locationModel=:newLocation where locationModel.id=:locationId");

而不是。或者传递LocationModel实例而不是id

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28039549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档