這裏是我的表:Hibernate的缺失列錯誤
CREATE TABLE IF NOT EXISTS `Jugadores` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '',
`nombre` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL COMMENT '',
`apellidos` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_spanish_ci' NOT NULL COMMENT '',
PRIMARY KEY (`id`) COMMENT ''
)
CREATE TABLE IF NOT EXISTS `Acciones` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '',
`accion` INT UNSIGNED NOT NULL COMMENT '',
`idJugador` INT UNSIGNED NOT NULL COMMENT '',
PRIMARY KEY (`id`) COMMENT '',
CONSTRAINT `fk_acciones_jugadores_id`
FOREIGN KEY (`idJugador`)
REFERENCES `Jugadores` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
)
這裏是我的Java類:
Jugador:
@Entity
@Table(name ="Jugadores")
public class Jugador{
private int id;
private String nombre;
private String apellidos;
private Map<Integer, Accion> accionesJugador;
public Jugador() {}
/**
* @return the id
*/
@Override
@Id
@GeneratedValue
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}
/**
* @param nombre the nombre to set
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* @return the apellidos
*/
public String getApellidos() {
return apellidos;
}
/**
* @param apellidos the apellidos to set
*/
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
/**
* @return the accionesJugador
*/
@OneToMany(cascade = CascadeType.ALL, mappedBy = "jugador")
@MapKey
public Map<Integer, Accion> getAccionesJugador() {
return accionesJugador;
}
/**
* @param accionesJugador the accionesJugador to set
*/
public void setAccionesJugador(Map<Integer, Accion> accionesJugador) {
this.accionesJugador = accionesJugador;
}
}
Accion:
@Entity
@Table(name = "Acciones")
public class Accion {
private int id;
private int accion;
private Jugador jugador;
public Accion(){};
@Override
@Id
@GeneratedValue
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the accion
*/
public int getAccion() {
return accion;
}
/**
* @param accion the accion to set
*/
public void setAccion(int accion) {
this.accion = accion;
}
/**
* @return the jugador
*/
@ManyToOne()
@JoinColumn(name = "idJugador")
public Jugador getJugador() {
return jugador;
}
/**
* @param jugador the jugador to set
*/
public void setJugador(Jugador jugador) {
this.jugador = jugador;
}
和Hibernate的日誌說:
Initial SessionFactory creation failed.org.hibernate.HibernateException: Missing column: accionesJugador_KEY in HBAssistant.Acciones
編輯:在Map<Integer, Accion> accionesJugador
的關鍵是的 Accion
解決了這個ID:上面的代碼解決了我原來的問題
聽起來像一個外鍵問題。是否有關於外鍵名稱的約定/限制? (我不知道冬眠) – m02ph3u5
你想在Jugador有一個Map。但是你還沒有告訴Hibernate地圖的關鍵應該是什麼。這是一個整數,但來自哪裏? –
我已更新我的問題。地圖的關鍵是Accion的ID(數據是地圖中每個條目的值) – gutiory