2011-03-21 85 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