Please see code below. DeviceDAO, Device, and Mobileuser are hibernate generated objects. the process works until i get to the second "if" conditional where I call mobileUser.getPin(). The problem is that mobileUser's properties (such as pin) are null. The values exist in the DB, but they area null, so my calls throw null pointer exceptions. Mobileuser's properties haven't been hydrated by hibernate. Any help is appreciated. Thanks.
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
Here's some more information as requested:
I am using MyEclipse Hibernate Reverse Engineering to generated data objects and DAO objects. Using annotations for mapping.
Here is 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;
}
}
And this is 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 has a property named "piin" while your Mobileuser class has a method getPin(). Is it possible that one of these is a typo? They should match, assuming that they are meant to represent the same information. As should the setter, setPin(String) or setPiin(String) whichever it should be.
If the db has a column "piin", you can change the mapping to map property pin to column piin, though this means you won't be able to regenerate the mapping from the db in the future.
Scares me when this happens, but I just got back from lunch and now it's working correctly. Didn't make any changes from before, but it's happy now. No idea what was causing it.
Thanks for the debugging help @Corey.
精彩评论