请参阅下面的代码。 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;
}
}
答案 0 :(得分:2)
Mobileuser.hbm有一个名为“piin”的属性,而您的Mobileuser类有一个方法getPin()。是否有可能其中一个是拼写错误?它们应该匹配,假设它们代表相同的信息。应该像setter,setPin(String)或setPiin(String)那样应该是什么。
如果db有一个列“piin”,你可以改变映射到map属性pin到列piin,虽然这意味着你将来无法从db重新生成映射。
答案 1 :(得分:0)
当发生这种情况时让我害怕,但我刚从午餐回来,现在它正常工作。没有做过任何改变,但现在很高兴。不知道是什么导致了它。
感谢调试帮助@Corey。