简体   繁体   中英

org.hibernate.propertyvalueexception not-null property references a null

im new to JPA, i got the error above when trying to persist the transaction data.

Here's my Entity:

  @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 + "]";
}

Here's my 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());
         }

Full error message:

org.hibernate.PropertyValueException: not-null property references a null or transient value: Entities.Transaction1.transactionDateorg.hibernate.PropertyValueException: not-null property references a null or transient value: Entities.Transaction1.transactionDate

I debugged it and it seemed like there is a value property of not null is null, which i dont seem to understand this error message. I thought I dont need to persist transactionID, as it is set to autoincrement, and transactionDate to timestamp oncurrentupdate. Can anyone please kindly help to fix?

The transactionDate field has been marked with @Basic(optional = false) . Ensure that the value for this field is not null while persisting the Transaction.

If the transactionData can be genuinely null (I guess not), you can remove the optional option from @Basic .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM