我正在java上创建一个小程序,它在MySQL上的现有数据库上进行更新。目前,这是我使用的表格:
create table Empleado (
idEmpleado int(11) not null,
nombre varchar(10) not null,
apellidoP varchar(10) not null,
apellidoM varchar(10) not null,
tipoEmpleado varchar(10) not null,
usuario varchar(15) not null,
contrasena varchar(15) not null,
primary key (idEmpleado))
create table Horario (
idEmpleado int(11) not null,
entradaL time default null,
salidaL time default null,
entradaM time default null,
salidaM time default null,
entradaMi time default null,
salidaMi time default null,
entradaJ time default null,
salidaJ time default null,
entradaV time default null,
salidaV time default null,
key idEmpleado(idEmpleado),
constraint horario_ibfk_1 foreign key (idEmpleado) references Empleado (idEmpleado));
这些是我的java课程
public class Empleado implements Serializable{
private int idEmpleado;
private String nombre;
private String apellidoP;
private String apellidoM;
private String tipoEmpleado;
private String usuario;
private String contrasena;
private Horario horario;
public Empleado (){
}
public Empleado(String nombre,String apellidoP,String apellidoM,String tipoEmpleado,String usuario,String contrasena,Horario horario){
this.nombre=nombre;
this.apellidoP=apellidoP;
this.apellidoM=apellidoM;
this.tipoEmpleado=tipoEmpleado;
this.usuario=usuario;
this.contrasena=contrasena;
this.horario=horario;
}
public class Horario {
private int idEmpleado;
private Timestamp entradaL;
private Timestamp salidaL;
private Timestamp entradaM;
private Timestamp salidaM;
private Timestamp entradaMi;
private Timestamp salidaMi;
private Timestamp entradaJ;
private Timestamp salidaJ;
private Timestamp entradaV;
private Timestamp salidaV;
public Horario(){
}
这是Empleado.hbm.xml
<hibernate-mapping>
<class name="com.cafeteria.modelos.Empleado" table="EMPLEADO">
<id column="idEmpleado" name="idEmpleado">
<generator class="foreign">
<param name="property">horario</param>
</generator>
</id>
<property name="nombre"/>
<property name="apellidoP"/>
<property name="apellidoM"/>
<property name="tipoEmpleado"/>
<property name="usuario"/>
<property name="contrasena"/>
<one-to-one name="horario" cascade="persist, delete"/>
</class>
和Horario.hbm.xml
<hibernate-mapping>
<class name="com.cafeteria.modelos.Horario" table="HORARIO">
<id column="idEmpleado" name="idEmpleado">
<generator class="increment"/>
</id>
<property name="entradaL"/>
<property name="salidaL"/>
<property name="entradaM"/>
<property name="salidaM"/>
<property name="entradaMi"/>
<property name="salidaMi"/>
<property name="entradaJ"/>
<property name="salidaJ"/>
<property name="entradaV"/>
<property name="salidaV"/>
现在,当我这样做时:
public static void main(String[] args) {
String nombre="Adolfo";
String apellidoP="Esparza";
String apellidoM="Sordo";
String tipoEmpleado="admin";
String usuario="adolf";
String contrasena="queondamiadolf";
Session sesion;
Empleado empleado;
Horario horario;
horario=new Horario();
empleado = new Empleado(nombre,apellidoP,apellidoM,tipoEmpleado,usuario,contrasena,horario);
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.save(empleado);
sesion.getTransaction().commit();
sesion.close();
System.out.println(Integer.toString(empleado.getIdEmpleado()));
}
我得到了这个例外:
Cannot add or update a child row: a foreign key constraint fails (`cafeteria`.`horario`, CONSTRAINT `horario_ibfk_1` FOREIGN KEY (`idEmpleado`) REFERENCES `empleado` (`idEmpleado`))
现在,我知道为什么会这样。 Hibernate试图在表格中插入一个寄存器&#34; Horario&#34;首先,然后在表格#34; Empleado&#34;。因为&#34; idEmpleado&#34;没有注册?那个试图插入&#34; horario,在表#34; Empleado&#34;中,我得到了那些例外。我的问题是:如何在表格#34; Empleado&#34;中再进行hibernate插入,然后在表格#34; Horario&#34;所以这不会发生吗?我希望将idEmpleado保留为&#34; Empleado&#34;以及作为fk in&#34; Horario&#34;