我尝试使用hbm文件从表“Peso”合成主键(不是注释,我知道stackoverflow中有很多这些,但我需要仅使用hbm文件进行合成)。我创建了一个中间类来管理id(PesoId类)并将PesoId成员分配给类Peso。
注意:Peso类中的Alumno字段与表Alumnos具有多对一关系。
我不知道哪里失败但是当我尝试保存一个Peso实例(又称对象)时,我得到的错误如下:“整数无法转换为PesoId”。
表格结构
Field Type Null Key Default Extra
Alumno "int(11) unsigned zerofill" NO PRI NULL
Fecha timestamp NO PRI CURRENT_TIMESTAMP
Peso decimal(5,2) NO NULL
Alumno& Fecha需要是复合主键。 Alumno与alumno的另一张桌子“Alumnos”相关联。
的hbm.xml
<hibernate-mapping>
<class catalog="***" name="com.***.***.Peso" optimistic-lock="version" table="peso">
<cache usage="read-only"/>
<composite-id name="id" class="com.***.***.PesoId">
<key-property name="alumno" column="Alumno"/>
<key-property name="fecha" column="Fecha"/>
</composite-id>
<many-to-one class="com.***.***s.Alumno" fetch="select" insert="false" name="alumno" update="false">
<column name="Alumno" not-null="true"/>
</many-to-one>
<property name="peso" type="java.lang.Float">
<column name="Peso" not-null="true" precision="5"/>
</property>-->
</class>
</hibernate-mapping>
Peso class
import java.util.Date;
public class Peso implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private PesoId id;
private float peso;
public Peso() {
}
public Peso(PesoId id, float peso) {
this.id = id;
this.peso = peso;
}
public PesoId getId() {
return this.id;
}
public void setId(PesoId id) {
this.id = id;
}
public float getPeso() {
return this.peso;
}
public void setPeso(float peso) {
this.peso = peso;
}
public Date getFecha() {
return this.id.getFecha();
}
}
PesoId class
import java.util.Date;
public class PesoId implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer alumno;
private Date fecha;
public PesoId() {
}
public PesoId(Integer alumno, Date fecha) {
this.alumno = alumno;
this.fecha = fecha;
}
public Integer getAlumno() {
return this.alumno;
}
public void setAlumno(Integer alumno) {
this.alumno = alumno;
}
public Date getFecha() {
return this.fecha;
}
public void setFecha(Date fecha) {
this.fecha = fecha;
}
public boolean equals(Object other) {
if ((this == other)) {
return true;
}
if ((other == null)) {
return false;
}
if (!(other instanceof PesoId)) {
return false;
}
PesoId castOther = (PesoId) other;
return (this.getAlumno() == castOther.getAlumno())
&& ((this.getFecha() == castOther.getFecha()) || (this.getFecha() != null && castOther.getFecha() != null && this.getFecha().equals(castOther.getFecha())));
}
public int hashCode() {
int result = 17;
result = 37 * result + this.getAlumno();
result = 37 * result + (getFecha() == null ? 0 : this.getFecha().hashCode());
return result;
}
}