Es simplemente una relación de entre una tabla de mensaje y una tabla de los distintos estados por los que puede pasar un mensaje.
Mis tablas son:
Código PHP:
--
-- Estructura de tabla para la tabla `message_status`
--
CREATE TABLE IF NOT EXISTS message_status (
id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
name char(25) NOT NULL DEFAULT '',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Estructura de tabla para la tabla `messages`
--
CREATE TABLE IF NOT EXISTS `messages` (
id smallint(5) unsigned NOT NULL AUTO_INCREMENT,
name char(150) NOT NULL DEFAULT '',
email char(150) NOT NULL DEFAULT '',
issue char(150) NOT NULL DEFAULT '',
content text NOT NULL,
ip char(20) NOT NULL DEFAULT '',
user_agent char(200) NOT NULL DEFAULT '',
moment datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
message_status_id tinyint(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (id),
FOREIGN KEY (message_status_id) REFERENCES message_status(id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Código PHP:
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="name")
@NotEmpty(message="El Nombre es obligatorio") @Size(min=3, max=150, message="El Nombre debe tener entre 3 y 150 caracteres")
private String name;
@Column(name="email")
@NotEmpty(message="El Email es obligatorio") @Email(message="El Email no es válido")
private String email;
@Column(name="issue")
@NotEmpty(message="El Asunto es obligatorio") @Size(min=3, max=150, message="El Asunto debe tener entre 3 y 150 caracteres")
private String issue;
@Column(name="content")
@NotEmpty(message="El Mensaje es obligatorio") @Size(min=3, max=150, message="El Mensaje debe tener entre 3 y 150 caracteres")
private String content;
@Column(name="ip")
private String ip;
@Column(name="user_agent")
private String user_agent;
@Column(name="moment")
@Temporal(TemporalType.TIMESTAMP)
private Date moment;
@ManyToOne
@JoinColumn(name="message_status_id")
private MessageStatus messagestatus;
/**
*
*/
public Message()
{
}
}
@Entity
@Table(name="message_status")
public class MessageStatus {
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="name")
@NotEmpty(message="El Nombre es obligatorio") @Size(min=3, max=150, message="El Nombre debe tener entre 3 y 150 caracteres")
private String name;
@OneToMany(mappedBy="message_status")
private Set<Message> messages;
public MessageStatus()
{
}
public MessageStatus(String name)
{
this.name = name;
}
}
Código PHP:
// Se obtiene la sesion
Session s = HibernateUtil.getSession();
s.beginTransaction();
// Se salva en base de datos
MessageStatus ms = new MessageStatus("Status de prueba");
s.save(ms);
message.setMessagestatus(ms);
s.save(message);
s.getTransaction().commit();
s.close();
El fallo viene dado al querer realizar una relación bidireccional, si comento las siguientes líneas de la clase messagestatus funciona correctamente:
@OneToMany(mappedBy="message_status")
private Set<Message> messages;
El error que se produce es un error 500 del servidor y pone lo siguiente:
Estado HTTP 500 - type Informe de Excepción mensaje descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.excepción org.springframework.web.util.NestedServletExceptio n: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.omb.bets.model.hibernate.HibernateUtil
org.springframework.web.servlet.DispatcherServlet. triggerAfterCompletionWithError(DispatcherServlet. java:1259)
org.springframework.web.servlet.DispatcherServlet. doDispatch(DispatcherServlet.java:945)
org.springframework.web.servlet.DispatcherServlet. doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.d oPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet .java:641)
org.springframework.web.servlet.FrameworkServlet.s ervice(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
</pre></p><p><b>causa raíz</b> <pre>java.lang.NoClassDefFoundError: Could not initialize class com.omb.bets.model.hibernate.HibernateUtil
com.omb.bets.web.pages.Contact.addContact(Contact. java:67)
sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.web.method.support.InvocableHa ndlerMethod.invoke(InvocableHandlerMethod.java:219 )
org.springframework.web.method.support.InvocableHa ndlerMethod.invokeForRequest(InvocableHandlerMetho d.java:132)
org.springframework.web.servlet.mvc.method.annotat ion.ServletInvocableHandlerMethod.invokeAndHandle( ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotat ion.RequestMappingHandlerAdapter.invokeHandleMetho d(RequestMappingHandlerAdapter.java:745)
org.springframework.web.servlet.mvc.method.annotat ion.RequestMappingHandlerAdapter.handleInternal(Re questMappingHandlerAdapter.java:686)
org.springframework.web.servlet.mvc.method.Abstrac tHandlerMethodAdapter.handle(AbstractHandlerMethod Adapter.java:80)
org.springframework.web.servlet.DispatcherServlet. doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet. doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.p rocessRequest(FrameworkServlet.java:936)
org.springframework.web.servlet.FrameworkServlet.d oPost(FrameworkServlet.java:838)
javax.servlet.http.HttpServlet.service(HttpServlet .java:641)
org.springframework.web.servlet.FrameworkServlet.s ervice(FrameworkServlet.java:812)
javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
</pre></p><p><b>nota</b> <u>La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.14.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.14</h3