2014-09-04 98 views
0

你好這裏是Bussinss對象類,其中pwdId和用戶id是NOTNULL在DB產生的原因:org.hibernate.PropertyValueException:NOTNULL屬性引用null或瞬時值:

@Entity 
@Table(name="CLOUD_SVR_PASSWORDS_HISTORY") 
@NamedQuery(name="CloudSvrPasswordsHistory.findAll", query="SELECT c FROM CloudSvrPasswordsHistory c") 
public class CloudSvrPasswordsHistory implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name="PWD_ID",nullable=false) 
    private long pwdId; 

    @Column(name="OLD_PASSWORD") 
    private String oldPassword; 

    @Column(name="CURRENT_PASSWORD") 
    private String currentPassword; 

    @Column(name="PWD_CHANGE_TYPE") 
    private String pwdChangeType; 

    @Column(name="CREATED_DATE") 
    private Timestamp createdDate; 


    @ManyToOne 
    @JoinColumn(name="USER_ID",nullable=false) 
    private CloudSvrUser user; 


    public long getPwdId() { 
     return pwdId; 
    } 


    public void setPwdId(long pwdId) { 
     this.pwdId = pwdId; 
    } 


    public String getOldPassword() { 
     return oldPassword; 
    } 


    public void setOldPassword(String oldPassword) { 
     this.oldPassword = oldPassword; 
    } 


    public String getCurrentPassword() { 
     return currentPassword; 
    } 


    public void setCurrentPassword(String currentPassword) { 
     this.currentPassword = currentPassword; 
    } 


    public String getPwdChangeType() { 
     return pwdChangeType; 
    } 


    public void setPwdChangeType(String pwdChangeType) { 
     this.pwdChangeType = pwdChangeType; 
    } 


    public Timestamp getCreatedDate() { 
     return createdDate; 
    } 


    public void setCreatedDate(Timestamp createdDate) { 
     this.createdDate = createdDate; 
    } 


    public CloudSvrUser getUser() { 
     return user; 
    } 


    public void setUser(CloudSvrUser user) { 
     this.user = user; 
    } 

這裏是我的服務實現類只有一個方法,我specifyng

@Transactional 
public void changePassword(CloudSvrPasswordsHistory pwdInfo)throws BusinessException 
{ 
    //String password=null; 

    try{ 

     System.out.println("servcimpl----------"); 
     CloudSvrUser dbUser =getUser(pwdInfo); 

     if(dbUser != null){ 

      List<CloudSvrPasswordsHistory> newPwdList = new ArrayList<CloudSvrPasswordsHistory>(); 

      CloudSvrPasswordsHistory changedPwd = new CloudSvrPasswordsHistory(); 

      changedPwd.setOldPassword(pwdInfo.getOldPassword()); 
      changedPwd.setCurrentPassword(pwdInfo.getCurrentPassword()); 

      newPwdList.add(changedPwd); 
      dbUser.setPassCode(changedPwd.getCurrentPassword()); 
      //set childs to parent 
      pwdInfo.setUser(dbUser); 

      dbUser.setUserPwdList(newPwdList); 

      //password= 
      changedPwd(dbUser); 
      System.out.println("serviceimplend---------"); 
     } 
    } 
    catch(DaoException daoexception) 
    { 
     throw new BusinessException(daoexception.getMessage()); 
    } 
    //return password; 

} 

這裏是我的DAOImpl類

@Repository("passwordDao") 
public class PasswordDaoImpl extends BaseDaoImpl implements PasswordDao 
{ 

    PasswordDaoImpl() 
    {} 

    public void ChangedPwd(CloudSvrUser user) 
    { 
     //String password=null; 

     List<CloudSvrPasswordsHistory> pwdinfo = user.getUserPwdList(); 

     for(CloudSvrPasswordsHistory changedPwd:pwdinfo) 
     { 

      //changedPwd.setPwdId((new Long(1))); 
      changedPwd.setCreatedDate(new Timestamp(System.currentTimeMillis())); 
      changedPwd.setPwdChangeType("ByUser"); 

     } 


     try{ 

      super.getHibernateTemplate().update(user); 
      //this.userDao.updateUser(dbUser); 

     } 
     catch(DataAccessException accessException){ 

      throw new DaoException("Internal DB error occured."); 

     } 

     //return password ; 
    } 

給要求越來越例外控制檯時

造成的:org.hibernate.PropertyValueException:非空屬性引用null或瞬時值:com.omnypay.dao.bo.CloudSvrPasswordsHistory.user

請幫我

回答

2

錯誤說CloudSvrPasswordsHistory實體的user屬性是null,那裏的hibernate期待它是not-null,這是因爲你告訴hibernatenullable=false使用此映射user屬性:

@ManyToOne 
@JoinColumn(name="USER_ID",nullable=false) 
private CloudSvrUser user; 

因此,要解決這個問題,你必須設置user屬性爲您CloudSvrPasswordsHistory實體:

changedPwd.setUser(dbUser); 
相關問題