我正在开发一个项目,我有一个名为Conductor(Driver,西班牙语)的课程。此Conductor类具有参数LatLng(包含位置纬度 - 经度)。我希望这两个类使用Hibernate将它们保存在我的数据库中,我有一些经验。
这里是你的hiberate映射文件的类:
public class LatLng implements Serializable {
/*
* Atributos
*/
private static final long serialVersionUID = -234127535402360915L;
private long id;
private double latitud;
private double longitud;
/*
* Métodos
*/
public LatLng(){
}
public LatLng(double latitud, double longitud){
this.latitud = latitud;
this.longitud = longitud;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public double getLatitud() {
return this.latitud;
}
public void setLatitud(double value) {
this.latitud = value;
}
public double getLongitud() {
return this.longitud;
}
public void setLongitud(double value) {
this.longitud = value;
}
@Override
public String toString() {
return "Latitud: " + this.latitud + ", longitud: " + this.longitud;
}
@Override
public int hashCode() {
int result;
result = (int) (id + latitud + longitud);
return result;
}
@Override
public boolean equals(Object other) {
if(other==null)
return false;
if( !(other instanceof Conductor) )
return false;
LatLng pos = (LatLng) other;
return pos.getId()==this.id && pos.getLatitud()==this.latitud && pos.getLongitud()==this.longitud;
}
}
<!DOCTYPE
hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<class name="com.ingartek.cavwebapp.model.LatLng" table="LATLNG">
<id name="id" type="long" column="LATLNG_ID">
<generator class="native"/>
</id>
<property name="latitud" type="double" column="LATLNG_LATITUD" not-null="true" />
<property name="longitud" type="double" column="LATLNG_LONGITUD" not-null="true" />
</class>
public class Conductor implements Serializable {
/*
* Atributos
*/
private static final long serialVersionUID = 4492787316635472774L;
private String email;
private String nombre;
private String telefono;
private String domicilio;
private LatLng domicilioCoord;
/*
* Métodos
*/
public Conductor(){
}
public Conductor(String email, String nombre, String telefono, String domicilio,
LatLng domicilioCoord){
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String value) {
this.nombre = value;
}
public String getEmail() {
return this.email;
}
public void setEmail(String value) {
this.email = value;
}
public String getTelefono() {
return this.telefono;
}
public void setTelefono(String value) {
this.telefono = value;
}
public String getDomicilio() {
return this.domicilio;
}
public void setDomicilio(String value) {
this.domicilio = value;
}
public LatLng getDomicilioCoord() {
return this.domicilioCoord;
}
public void setDomicilioCoord(LatLng value) {
this.domicilioCoord = value;
}
@Override
public int hashCode() {
return email.hashCode() + nombre.hashCode() + telefono.hashCode() + domicilio.hashCode() + domicilioCoord.hashCode();
}
@Override
public boolean equals(Object other) {
if(other==null)
return false;
if( !(other instanceof Conductor) )
return false;
Conductor c = (Conductor) other;
return c.getEmail().equals(this.email)
&& c.getNombre().equals(this.nombre)
&& c.getTelefono().equals(this.telefono)
&& c.getDomicilio().equals(this.domicilio)
&& c.getDomicilioCoord().equals(this.domicilioCoord);
}
}
<!DOCTYPE hibernate-mapping PUBLIC
"Hibernate Mapping 3.0"
"http://hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<class name="com.ingartek.cavwebapp.model.Conductor" table="CONDUCTORES">
<!-- Las clases referenciadas no se habían creado -->
<id name="email" type="text" column="CONDUCTORES_EMAIL">
<generator class="assigned" />
</id>
<property name="nombre" type="string" column="CONDUCTORES_NOMBRE" not-null="true" />
<property name="telefono" type="string" column="CONDUCTORES_TELEFONO" not-null="true" />
<property name="domicilio" type="string" column="CONDUCTORES_DOMICILIO" not-null="true" />
<!-- Clases referenciadas -->
<many-to-one name="domicilioCoord" column="CONDUCTORES_DOCIMILIOCOORD" class="com.ingartek.cavwebapp.model.LatLng" cascade="remove" />
</class>
在Dao课程中,我执行此操作时会出现问题:
public Conductor anadirConductor(String pEmail,String pNombre,String pTfno, String pDomicilio,double pLat,double pLon)抛出ExisteConductorException { System.out.println(“Creando nuevo conductor”);
if(!isEmailUsado(pEmail)){
beginTransaction();
System.out.println("Creando el conductor");
LatLng pos = new LatLng(pLat, pLon);
System.out.println("El identificador de la posicion es " + pos.getId());
Conductor unConductor = new Conductor(pEmail, pNombre, pTfno, pDomicilio, pos);
if(!flota.existeConductor(unConductor)){
flota.anadirConductor(unConductor);
}
session.save(pos);
session.save(unConductor);
commitTransaction();
return unConductor;
}else{
rollbackTransaction();
throw new ExisteConductorException();
}
}
...使用此行导体c = new PtDaoService()。anadirConductor(email,nombre,tfno,domicilio,lat,lon);发现异常会抛出以下消息:
feb 17, 2015 1:05:40 PM com.vaadin.server.DefaultErrorHandler doDefault
GRAVE:org.hibernate.id.IdentifierGenerationException:在调用save()之前必须手动分配此类的ID:com.ingartek.cavwebapp.model.Conductor 在org.hibernate.id.Assigned.generate(Assigned.java:52)....
我的错误是什么?
需要帮助:(
谢谢
答案 0 :(得分:0)
解决。我在Dao中使用的构造函数没有分配任何东西......
应该是这样的:
public Conductor(String email, String nombre, String telefono, String domicilio,
LatLng domicilioCoord){
this.email = email;
this.nombre = nombre;
this.telefono = telefono;
this.domicilio = domicilio;
this.domicilioCoord = domicilioCoord;
}