2013-08-30 43 views
6

Ich versuche, eine Tabellenzeile mit der Methode session.saveOrUpdate() in Hibernate zu aktualisieren.Hibernate saveOrUpdate aktualisiert nicht

Es ist jedoch nicht möglich, die Zeile zu aktualisieren und versucht, sie zu speichern, indem eine Insert-Anweisung erstellt. Diese Einfügung funktioniert nicht, da einige Felder in der Datenbank nicht nullfähig sind.

Ich kann die ID des Objekts auf der DAO-Ebene gespeichert werden, so dass ich nicht verstehen kann, warum es nicht nur die entsprechende Zeile in der DB-Tabelle aktualisiert.

Bean Klasse: (BaseEntityBean hat die Id, CreatedBy usw.)

public class EmployeeMasterBean extends BaseEntityBean { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

@Column(name = "FirstName", nullable = false) 
private String firstName; 

@Column(name = "LastName", nullable = false) 
private String lastName; 

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "Dob", insertable = true, updatable = true, nullable = false) 
private Date dateOfBirth; 

@Column(name = "Email", length = 100) 
private String email; 

@Column(name = "PhoneNumber", nullable = false) 
private String phoneNumber; 

@Column(name = "Address1", nullable = false) 
private String address1; 

@Column(name = "Type", nullable = false) 
private Short employeeType; 

@Column(name = "Gender", nullable = false) 
private Short gender; 


/** 
* @return the firstName 
*/ 
public final String getFirstName() { 
    return firstName; 
} 

/** 
* @param firstName the firstName to set 
*/ 
public final void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

/** 
* @return the lastName 
*/ 
public final String getLastName() { 
    return lastName; 
} 

/** 
* @param lastName the lastName to set 
*/ 
public final void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

/** 
* @return the dateOfBirth 
*/ 
public final Date getDateOfBirth() { 
    return dateOfBirth; 
} 

/** 
* @param dateOfBirth the dateOfBirth to set 
*/ 
public final void setDateOfBirth(Date dateOfBirth) { 
    this.dateOfBirth = dateOfBirth; 
} 

/** 
* @return the email 
*/ 
public final String getEmail() { 
    return email; 
} 

/** 
* @param email the email to set 
*/ 
public final void setEmail(String email) { 
    this.email = email; 
} 

/** 
* @return the phoneNumber 
*/ 
public final String getPhoneNumber() { 
    return phoneNumber; 
} 

/** 
* @param phoneNumber the phoneNumber to set 
*/ 
public final void setPhoneNumber(String phoneNumber) { 
    this.phoneNumber = phoneNumber; 
} 

/** 
* @return the address1 
*/ 
public final String getAddress1() { 
    return address1; 
} 

/** 
* @param address1 the address1 to set 
*/ 
public final void setAddress1(String address1) { 
    this.address1 = address1; 
} 

/** 
* @return the employeeType 
*/ 
public final Short getEmployeeType() { 
    return employeeType; 
} 

/** 
* @param employeeType the employeeType to set 
*/ 
public final void setEmployeeType(Short employeeType) { 
    this.employeeType = employeeType; 
} 


/** 
* @return the gender 
*/ 
public final Short getGender() { 
    return gender; 
} 

/** 
* @param gender the gender to set 
*/ 
public final void setGender(Short gender) { 
    this.gender = gender; 
} 
} 

DAO-Methode:

public EmployeeMasterBean saveOrUpdateEmployee(EmployeeMasterBean employeeMasterBean) throws Exception{ 
    Session session = null; 
    Transaction tx = null; 

    try { 
     session = HibernateUtil.getSessionFactory().openSession(); 
     tx = session.beginTransaction(); 

     session.saveOrUpdate(employeeMasterBean); 

     tx.commit(); 
    } finally { 
     session.close(); 
    } 
    return employeeMasterBean; 
} 

Eclipse-Debugger Ausnahmen geworfen werden:

could not insert: [com.indven.gpil.hrd.entity.EmployeeMasterBean] 
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'CreatedBy' cannot be null 
+0

Ist 'employeeMasterBean.id' null? – mabbas

+0

'MitarbeiterMasterBean' hat createdby Set? – Ved

+0

Klingt so, als ob du eine getrennte Entity übergibst;) – Thomas

Antwort

1

nullbar ist. Für die Bean wurde die Eigenschaft rowVersion (für das optimistische Sperren) nicht festgelegt, daher war sie standardmäßig null. Hibernate interpretierte dies als neuen Datensatz und speicherte es weiter.

Ich habe es behoben, indem ich die Zeilenversion in meinem Value-Objekt und die entsprechende Bean gespeichert habe, wann immer ich versucht habe, irgendwelche Datensätze zu speichern oder zu aktualisieren.

0

Da die Fehlermeldung sagen, die Datenbank hat eine Spalte createdby, die nicht null sein kann.

Wenn Sie saveOrUpdate() aufgerufen haben, hat jemand diese Eigenschaft auf null festgelegt, so dass das Update nicht möglich ist.

0

Ich denke CreatedBy Spalte in DB-Tabelle vorhanden ist, wie notnull aber Bean ist diese Spalte zugeordnet nicht haben, also ein null Wert gesendet wird, wenn Sie eine saveOrUpdate tun, die über Ausnahmefehler verursacht werden.

Fügen Sie entweder eine Zuordnung zu CreatedBy in Ihrer Bean mit einigen Standardwerten hinzu und lassen Sie Trigger usw. den Standardwert aktualisieren. Oder wenn Sie die Spalte so ändern können, dass sie in der Datenbank

Verwandte Themen