请参见下面的代码。 DeviceDAO,Device和Mobileuser是休眠生成的对象。该过程一直进行到我到达第二个“ if”条件(在此条件下我调用mobileUser.getPin())为止。问题是mobileUser的属性(例如pin)为空。这些值存在于数据库中,但它们的区域为空,因此我的调用引发了空指针异常。休眠状态并没有使Mobileuser的属性水化。任何帮助表示赞赏。谢谢。

DeviceDAO deviceDao = new DeviceDAO();
    List<Device> devices = deviceDao.findByUdid(requestTokenModel.getUdid());

                if(!devices.isEmpty())
            {
                Device device = devices.get(0);
                Mobileuser mobileUser =device.getMobileuser();
                if(mobileUser.getPin().contentEquals(requestTokenModel.getPiin()) && mobileUser.getIsactive() == "Y")
                        {
                            //omitted
                        }
            }


更新

以下是根据要求提供的更多信息:

我正在使用MyEclipse Hibernate逆向工程生成数据对象和DAO对象。使用注释进行映射。

这是Mobileuser.java

     package com.myeclipse.hibernate;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.GenericGenerator;

/**
 * Mobileuser entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "MOBILEUSER", schema = "WARPVALID")
public class Mobileuser implements java.io.Serializable {

    // Fields

    private Integer mobileuserid;
    private Servicetype servicetype;
    private String lastname;
    private String username;
    private String firstname;
    private String organization;
    private String piin;
    private String isactive;
    private Date createdate;
    private Date modifydate;
    private String email;
    private String isaccepted;
    private Set<Registration> registrations = new HashSet<Registration>(0);
    private Set<Device> devices = new HashSet<Device>(0);

    // Constructors

    /** default constructor */
    public Mobileuser() {
    }

    /** minimal constructor */
    public Mobileuser(String lastname, String username, String firstname,
            String piin, String isactive, Date createdate, Date modifydate,
            String isaccepted) {
        this.lastname = lastname;
        this.username = username;
        this.firstname = firstname;
        this.piin = piin;
        this.isactive = isactive;
        this.createdate = createdate;
        this.modifydate = modifydate;
        this.isaccepted = isaccepted;
    }

    /** full constructor */
    public Mobileuser(Servicetype servicetype, String lastname,
            String username, String firstname, String organization,
            String piin, String isactive, Date createdate, Date modifydate,
            String email, String isaccepted, Set<Registration> registrations,
            Set<Device> devices) {
        this.servicetype = servicetype;
        this.lastname = lastname;
        this.username = username;
        this.firstname = firstname;
        this.organization = organization;
        this.piin = piin;
        this.isactive = isactive;
        this.createdate = createdate;
        this.modifydate = modifydate;
        this.email = email;
        this.isaccepted = isaccepted;
        this.registrations = registrations;
        this.devices = devices;
    }

    // Property accessors
    @GenericGenerator(name = "generator", strategy = "increment")
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "MOBILEUSERID", unique = true, nullable = false, precision = 9, scale = 0)
    public Integer getMobileuserid() {
        return this.mobileuserid;
    }

    public void setMobileuserid(Integer mobileuserid) {
        this.mobileuserid = mobileuserid;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "SERVICETYPEID")
    public Servicetype getServicetype() {
        return this.servicetype;
    }

    public void setServicetype(Servicetype servicetype) {
        this.servicetype = servicetype;
    }

    @Column(name = "LASTNAME", nullable = false, length = 30)
    public String getLastname() {
        return this.lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    @Column(name = "USERNAME", nullable = false, length = 20)
    public String getUsername() {
        return this.username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Column(name = "FIRSTNAME", nullable = false, length = 30)
    public String getFirstname() {
        return this.firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    @Column(name = "ORGANIZATION", length = 50)
    public String getOrganization() {
        return this.organization;
    }

    public void setOrganization(String organization) {
        this.organization = organization;
    }

    @Column(name = "PIIN", nullable = false, length = 10)
    public String getPiin() {
        return this.piin;
    }

    public void setPiin(String piin) {
        this.piin = piin;
    }

    @Column(name = "ISACTIVE", nullable = false, length = 1)
    public String getIsactive() {
        return this.isactive;
    }

    public void setIsactive(String isactive) {
        this.isactive = isactive;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "CREATEDATE", nullable = false, length = 7)
    public Date getCreatedate() {
        return this.createdate;
    }

    public void setCreatedate(Date createdate) {
        this.createdate = createdate;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "MODIFYDATE", nullable = false, length = 7)
    public Date getModifydate() {
        return this.modifydate;
    }

    public void setModifydate(Date modifydate) {
        this.modifydate = modifydate;
    }

    @Column(name = "EMAIL", length = 50)
    public String getEmail() {
        return this.email;
    }

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

    @Column(name = "ISACCEPTED", nullable = false, length = 1)
    public String getIsaccepted() {
        return this.isaccepted;
    }

    public void setIsaccepted(String isaccepted) {
        this.isaccepted = isaccepted;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "mobileuser")
    public Set<Registration> getRegistrations() {
        return this.registrations;
    }

    public void setRegistrations(Set<Registration> registrations) {
        this.registrations = registrations;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "mobileuser")
    public Set<Device> getDevices() {
        return this.devices;
    }

    public void setDevices(Set<Device> devices) {
        this.devices = devices;
    }

}


这是Device.java:

package com.myeclipse.hibernate;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;

/**
 * Device entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "DEVICE", schema = "WARPVALID")
public class Device implements java.io.Serializable {

    // Fields

    private Integer deviceid;
    private Mobileuser mobileuser;
    private String udid;
    private String applicationversion;
    private String dataversion;
    private Set<Authentication> authentications = new HashSet<Authentication>(0);

    // Constructors

    /** default constructor */
    public Device() {
    }

    /** minimal constructor */
    public Device(Mobileuser mobileuser, String udid) {
        this.mobileuser = mobileuser;
        this.udid = udid;
    }

    /** full constructor */
    public Device(Mobileuser mobileuser, String udid,
            String applicationversion, String dataversion,
            Set<Authentication> authentications) {
        this.mobileuser = mobileuser;
        this.udid = udid;
        this.applicationversion = applicationversion;
        this.dataversion = dataversion;
        this.authentications = authentications;
    }

    // Property accessors
    @GenericGenerator(name = "generator", strategy = "increment")
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "DEVICEID", unique = true, nullable = false, precision = 9, scale = 0)
    public Integer getDeviceid() {
        return this.deviceid;
    }

    public void setDeviceid(Integer deviceid) {
        this.deviceid = deviceid;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "MOBILEUSERID", nullable = false)
    public Mobileuser getMobileuser() {
        return this.mobileuser;
    }

    public void setMobileuser(Mobileuser mobileuser) {
        this.mobileuser = mobileuser;
    }

    @Column(name = "UDID", nullable = false, length = 20)
    public String getUdid() {
        return this.udid;
    }

    public void setUdid(String udid) {
        this.udid = udid;
    }

    @Column(name = "APPLICATIONVERSION", length = 20)
    public String getApplicationversion() {
        return this.applicationversion;
    }

    public void setApplicationversion(String applicationversion) {
        this.applicationversion = applicationversion;
    }

    @Column(name = "DATAVERSION", length = 20)
    public String getDataversion() {
        return this.dataversion;
    }

    public void setDataversion(String dataversion) {
        this.dataversion = dataversion;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "device")
    public Set<Authentication> getAuthentications() {
        return this.authentications;
    }

    public void setAuthentications(Set<Authentication> authentications) {
        this.authentications = authentications;
    }

}

最佳答案

Mobileuser.hbm具有名为“ piin”的属性,而您的Mobileuser类具有方法getPin()。其中之一是拼写错误吗?它们应该匹配,并假设它们表示相同的信息。与setter一样,应使用setPin(String)或setPiin(String)。

如果数据库具有列“ piin”,则可以更改映射以将属性pin映射到列piin,尽管这意味着将来将无法从数据库重新生成映射。

关于java - hibernate 相关对象未水合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5384111/

10-09 02:47