2011-03-21 83 views
1

請參閱下面的代碼。 DeviceDAO,Device和Mobileuser是hibernate生成的對象。該過程的工作,直到我到達第二個「如果」條件,我呼籲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      
         } 
      } 

UPDATE

這裏的一些信息的要求:

我使用的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; 
    } 

} 
+0

請顯示您的'Mobileuser'映射。 – 2011-03-21 21:51:21

回答

0

當發生這種情況時會嚇到我,但我剛剛從午餐回來,現在它正常工作。沒有從之前做出任何改變,但現在很高興。不知道是什麼原因造成的。

感謝您的調試幫助@Corey。

2

Mobileuser.hbm有一個名爲 「piin」 屬性,而你的Mobileuser類有一個方法getPin() 。這可能是其中之一是一個錯字?他們應該匹配,假設他們是爲了表示相同的信息。應該像setter,setPin(String)或setPiin(String)中那樣。

如果數據庫有一列「piin」,您可以更改映射屬性引腳到列piin的映射,儘管這意味着您將來無法再從數據庫重新生成映射。

+0

其實映射是正確的。最初我改變了這封郵件中的代碼,說PIN不會混淆(猜測這會導致事故)。在我的實際代碼中,映射和teh getter/setter名稱是corerct(piin,getPiin,setPiin)。謝謝。 – kmehta 2011-03-22 01:19:05

+0

因此,您的映射和文件都使用piin,並且您仍然遇到上述問題......您是否可以將Mobileuser.java代碼添加到問題中? – Corey 2011-03-22 01:28:42

+0

Mobileuser.java是一個非常簡單的可序列化的POJO對象,每個持久性屬性都有getter和setter。 – kmehta 2011-03-22 14:38:05