6

Hibernate で session.saveOrUpdate() メソッドを使用してテーブル行を更新しようとしています。

ただし、行を更新できず、insert ステートメントを生成して保存しようとします。DB に NULL 不可のフィールドがいくつかあるため、この挿入は機能しません。

DAOレイヤーに保存するオブジェクトのIDを取得できるので、DBテーブルの対応する行を更新するだけではない理由がわかりません。

Bean クラス: (BaseEntityBean には Id、CreatedBy などがあります)

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 メソッド:

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 デバッガー例外は次のとおりです。

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

4 に答える 4

1

CreatedByDBテーブルに列が存在すると思いますnotnullが、Beanにはこの列がマップされていないため、nullを実行すると値が送信され、 saveOrUpdateAbove例外がスローされます。

デフォルト値を使用してBeanにマッピングを追加し、 CreatedByトリガーなどでデフォルト値を更新できるようにします。または、データベースで列をnull可能に変更できる場合

于 2013-08-30T13:02:34.237 に答える