2010-02-05 53 views
0

即时通讯新的JPA,我得到了上面的错误,当试图持久化交易数据。org.hibernate.propertyvalueexception非null属性引用null

这里是我的实体:

@Entity 
    @Table(name = "transaction1") 
    @NamedQueries({ 
    @NamedQuery(name = "Transaction1.findAll", query = "SELECT t FROM Transaction1 t"), 
    @NamedQuery(name = "Transaction1.findByTransactionID", query = "SELECT t FROM Transaction1 t WHERE t.transactionID = :transactionID"), 
    @NamedQuery(name = "Transaction1.findByAmount", query = "SELECT t FROM Transaction1 t WHERE t.amount = :amount"), 
    @NamedQuery(name = "Transaction1.findByFromAccNo", query = "SELECT t FROM Transaction1 t WHERE t.fromAccNo = :fromAccNo"), 
    @NamedQuery(name = "Transaction1.findByFromSortCodeNo", query = "SELECT t FROM Transaction1 t WHERE t.fromSortCodeNo = :fromSortCodeNo"), 
    @NamedQuery(name = "Transaction1.findByName", query = "SELECT t FROM Transaction1 t WHERE t.name = :name"), 
    @NamedQuery(name = "Transaction1.findByToAccNo", query = "SELECT t FROM Transaction1 t WHERE t.toAccNo = :toAccNo"), 
    @NamedQuery(name = "Transaction1.findByToSortCodeNo", query = "SELECT t FROM Transaction1 t WHERE t.toSortCodeNo = :toSortCodeNo"), 
    @NamedQuery(name = "Transaction1.findByTransactionDate", query = "SELECT t FROM Transaction1 t WHERE t.transactionDate = :transactionDate")}) 
public class Transaction1 implements Serializable { 
private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "Transaction_ID") 
private Integer transactionID; 
@Basic(optional = false) 
@Column(name = "Amount") 
private double amount; 
@Basic(optional = false) 
@Column(name = "From_Acc_No") 
private int fromAccNo; 
@Basic(optional = false) 
@Column(name = "From_Sort_Code_No") 
private String fromSortCodeNo; 
@Basic(optional = false) 
@Column(name = "Name") 
private String name; 
@Basic(optional = false) 
@Column(name = "To_Acc_No") 
private int toAccNo; 
@Basic(optional = false) 
@Column(name = "To_Sort_Code_No") 
private String toSortCodeNo; 
@Basic(optional = false) 
@Column(name = "Transaction_Date") 
@Temporal(TemporalType.TIMESTAMP) 
private Date transactionDate; 
static EntityManagerFactory emf = Persistence.createEntityManagerFactory("SWSXXPU"); 
public Transaction1() { 
} 

public Transaction1(Integer transactionID) { 
    this.transactionID = transactionID; 
} 

public Transaction1(Integer transactionID, double amount, int fromAccNo, String fromSortCodeNo, String name, int toAccNo, String toSortCodeNo, Date transactionDate) { 
    this.transactionID = transactionID; 
    this.amount = amount; 
    this.fromAccNo = fromAccNo; 
    this.fromSortCodeNo = fromSortCodeNo; 
    this.name = name; 
    this.toAccNo = toAccNo; 
    this.toSortCodeNo = toSortCodeNo; 
    this.transactionDate = transactionDate; 
} 

public Integer getTransactionID() { 
    return transactionID; 
} 

public void setTransactionID(Integer transactionID) { 
    this.transactionID = transactionID; 
} 

public double getAmount() { 
    return amount; 
} 

public void setAmount(double amount) { 
    this.amount = amount; 
} 

public int getFromAccNo() { 
    return fromAccNo; 
} 

public void setFromAccNo(int fromAccNo) { 
    this.fromAccNo = fromAccNo; 
} 

public String getFromSortCodeNo() { 
    return fromSortCodeNo; 
} 

public void setFromSortCodeNo(String fromSortCodeNo) { 
    this.fromSortCodeNo = fromSortCodeNo; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public int getToAccNo() { 
    return toAccNo; 
} 

public void setToAccNo(int toAccNo) { 
    this.toAccNo = toAccNo; 
} 

public String getToSortCodeNo() { 
    return toSortCodeNo; 
} 

public void setToSortCodeNo(String toSortCodeNo) { 
    this.toSortCodeNo = toSortCodeNo; 
} 

public Date getTransactionDate() { 
    return transactionDate; 
} 

public void setTransactionDate(Date transactionDate) { 
    this.transactionDate = transactionDate; 
} 

@Override 
public int hashCode() { 
    int hash = 0; 
    hash += (transactionID != null ? transactionID.hashCode() : 0); 
    return hash; 
} 

@Override 
public boolean equals(Object object) { 
    // TODO: Warning - this method won't work in the case the id fields are not set 
    if (!(object instanceof Transaction1)) { 
     return false; 
    } 
    Transaction1 other = (Transaction1) object; 
    if ((this.transactionID == null && other.transactionID != null) || (this.transactionID != null && !this.transactionID.equals(other.transactionID))) { 
     return false; 
    } 
    return true; 
} 

@Override 
public String toString() { 
    return "Entities.Transaction1[transactionID=" + transactionID + "]"; 
} 

这里是我的servlet:

try{ 

     Transaction1 t = new Transaction1(); 

     t.setFromAccNo(youraccinput); 
     t.setFromSortCodeNo(yoursortcodeinput); 
     t.setToAccNo(toaccinput); 
     t.setToSortCodeNo(destsortcodeinput); 
     t.setName(recname); 
     t.setAmount(amtsender); 

     EntityManager em; 
     EntityManagerFactory emf; 
     try { 
       emf = Persistence.createEntityManagerFactory("SWSXXPU"); 
       em = emf.createEntityManager(); 
       em.getTransaction().begin(); 
       em.persist(t); 
       em.getTransaction().commit(); 
       request.getRequestDispatcher("ListTransaction").forward(request, response); 
     } 
     catch(Throwable e){ 
       out.print(e.getMessage()); 
       out.print(e.getCause()); 
      } 
     Accounts.debitSourceAccBalance(youraccinput, toaccinput, recname, amtsender); 
     } 
     catch(Throwable e){ 
      out.print(e.getMessage()); 
      out.print(e.getCause()); 
     } 

完整的错误消息:

org.hibernate.PropertyValueException: 非空属性引用空或 瞬态值: Entities.Transacti on1.transactionDateorg.hibernate.PropertyValueException: 非空属性引用null或 瞬时值: Entities.Transaction1.transactionDate

我调试它,它好像没有null值属性为null ,我似乎不明白这个错误信息。我以为我不需要坚持transactionID,因为它被设置为自动增量,并且transactionDate对时间戳oncurrentupdate。任何人都可以请帮助修复?

回答

5

transactionDate该字段已标记为@Basic(optional = false)。确保在保留交易时该字段的值不为空。

如果transactionData可以真正为空(我猜不是),那么可以从@Basic中删除optional选项。

+0

花了2个小时检查出了什么问题,数据库中的实体类被添加了,这个@Basic由netbeans自动完成,所以我想我不需要对此做任何改变。非常感谢。 – kobrakai 2010-02-05 03:00:47

相关问题