Hibernate композитный foregin ключ с XDoclet

Использование Hibernate 3.2.7ga и XDoclet 2.0.6 (плагин Hibernate 1.0.4).

У меня есть следующие таблицы:

Сотрудник -> Pk (idemployee)

Оценка -> Pk (idemployee,valuationdate) / Fk (idmeployee ссылается на Employee.idemployee)

Я сделал следующие POJOS:

Работник

/**
* @hibernate.class  table="EMPLOYEES"  lazy="false"
* @hibernate.cache usage="read-write"
*  
*/
public class Employee {

private int _idEmployee;
private Set _employeeEvaluations;

/**
 * @return Returns the idEmpleado.
 * @hibernate.id  generator-class="native" unsaved-value="0"
 * @hibernate.generator-param name="sequence" value="idsequence"
 */
public int getIdEmployee(){
    return _idEmployee;
}

/**
 * @param idEmpleado The idEmpleado to set.
 */
public void setIdEmployee(int idEmpleado){
    _idEmployee = idEmpleado;
}


/**
 * @hibernate.set inverse="true" lazy="true" cascade="all" fetch="select"
 * @hibernate.one-to-many  class="ilog.rostering.model.Evaluation"
 * @hibernate.key column="IDEMPLOYEE"
 */
public Set getEmployeeEvaluations() {
    if (_employeeEvaluations == null)
        _employeeEvaluations = new HashSet();

    return _employeeEvaluations;
}

private void setEmployeeEvaluations(Set employeeEvaluations) {
    _employeeEvaluations = employeeEvaluations;
}
}

оценка

/**
 * 
 * @hibernate.class  table="EMPEVALUATIONS" lazy="true"
 * @hibernate.cache usage="read-write"
 * 
 *
 */
public class Evaluation {

private EvaluationPK _pk;
private String _evaluation;

public Evaluation(EvaluationPK pk, String evaluation) {
    setPk(pk);
    setEvaluation(evaluation);
}

public static class EvaluationPK implements Serializable{

    private Employee _employee;
    private Date _evaluationDate;

    public EvaluationPK() {

    }

    /**
     * @hibernate.key-property
     * @hibernate.many-to-one class="ilog.rostering.model.Employee" column="IDEMPLOYEE" not-null="true"
     */
    public Employee getEmployee(){
        return _employee;
    }

    /**
     * @hibernate.key-property
     */
    public Date getEvaluationDate(){
        return _evaluationDate;
    }

    public void setEmployee(Employee emp){
        _employee=emp;
    }

    public void setEvaluationDate(Date date){
        _evaluationDate=date;
    }

    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(Object obj){
        EvaluationPK pk = (EvaluationPK)obj;
        return pk.getEmployee().getIdEmployee()== getEmployee().getIdEmployee() && pk.getEvaluationDate().equals( getEvaluationDate() ) ;
    }

    /**
     * @see java.lang.Object#hashCode()
     */
    public int hashCode(){
        return getEvaluationDate().hashCode() + getEmployee().getIdEmployee();
    }

}

/**
 * @hibernate.composite-id
 * @return the EvaluationPK
 */
public EvaluationPK getPk(){
    return _pk;
}

/**
 * @param pk the pk to set
 */
public void setPk(EvaluationPK pk){
    _pk = pk;
}

/**
 * @hibernate.property column="EVALUATION"
 */
public String getEvaluation() {
    return _evaluation;
}



public void setEvaluation(String evaluation) {
    this._evaluation = evaluation;
}
  }

Когда приложение восстанавливает оценки сотрудника, я получаю ошибку, потому что выбор, который оно пытается выполнить, следующий:

select 
employeeev0_.IDEMPLOYEE as IDEMPLOYEE1_, 
employeeev0_.employee as employee1_, 
employeeev0_.evaluationDate as evaluati2_1_, 
employeeev0_.employee as employee23_0_, 
employeeev0_.evaluationDate as evaluati2_23_0_,
employeeev0_.EVALUATION as EVALUATION23_0_, 
from EMPEVALUATIONS employeeev0_ where employeeev0_.IDEMPLOYEE=?

Я также попытался оставить только поле int _idemployee в классе PK и добавить следующее поле в Evaluation:

Employee _employee;

 /**
 *     
 * @hibernate.many-to-one class="ilog.rostering.model.Employee" column="IDEMPLOYEE" not-null="false"
 *
 * @return Returns the employee
 */
public Employee getEmployee() {
    return _employee;
}

Этот метод дал мне другую ошибку: при попытке сделать коммит произошел сбой, потому что вставка, которую он пытался выполнить, была:

insert into EMPEVALUATIONS (IDEMPLOYEE, EVALUATION, idEmployee, evaluationDate) values (?, ?, ?, ?)

Я чувствую, что приближаюсь к решению, но за всю свою жизнь не могу найти ни одного примера с такими тегами!

Большое спасибо всем заранее

0 ответов

Другие вопросы по тегам