Hibernate相关对象没有水合

时间:2011-03-21 21:43:17

标签: java hibernate nullpointerexception

请参阅下面的代码。 DeviceDAO,Device和Mobileuser是休眠生成的对象。这个过程一直有效,直到我进入第二个“if”条件,我调用了mobileUser.getPin()。问题是mobileUser的属性(例如pin)为null。这些值存在于DB中,但它们的区域为null,因此我的调用会抛出空指针异常。 Mobileuser的属性没有被hibernate充实。任何帮助表示赞赏。感谢。

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 Reverse Engineering来生成数据对象和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;
    }

}

2 个答案:

答案 0 :(得分:2)

Mobileuser.hbm有一个名为“piin”的属性,而您的Mobileuser类有一个方法getPin()。是否有可能其中一个是拼写错误?它们应该匹配,假设它们代表相同的信息。应该像setter,setPin(String)或setPiin(String)那样应该是什么。

如果db有一个列“piin”,你可以改变映射到map属性pin到列piin,虽然这意味着你将来无法从db重新生成映射。

答案 1 :(得分:0)

当发生这种情况时让我害怕,但我刚从午餐回来,现在它正常工作。没有做过任何改变,但现在很高兴。不知道是什么导致了它。

感谢调试帮助@Corey。