Foros del Web » Programación para mayores de 30 ;) » Java »

Mapear relaciones con anotaciones de Hibernate y SpringMVC

Estas en el tema de Mapear relaciones con anotaciones de Hibernate y SpringMVC en el foro de Java en Foros del Web. Estoy realizando un proyecto con springMVC y hibernate y estoy llegando a la parte de mapear las relaciones en la base de datos. Me he ...
  #1 (permalink)  
Antiguo 08/10/2013, 11:59
 
Fecha de Ingreso: febrero-2006
Mensajes: 43
Antigüedad: 18 años, 2 meses
Puntos: 1
Mapear relaciones con anotaciones de Hibernate y SpringMVC

Estoy realizando un proyecto con springMVC y hibernate y estoy llegando a la parte de mapear las relaciones en la base de datos. Me he estado documentando y tengo el siguiente caso en que no se que tipo de relación usar ni como mapearla.

Tengo dos tablas, message y mesage_status (es una duda que me interesa aclarar porque tengo un montón de tablas de este estado tabla-estadotabla).
Código PHP:
--
-- 
Estructura de tabla para la tabla `message_status`
--

CREATE TABLE IF NOT EXISTS message_status (
  
id tinyint(3unsigned NOT NULL AUTO_INCREMENT,
  
name char(25NOT 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(5unsigned NOT NULL AUTO_INCREMENT,
  
name char(150NOT NULL DEFAULT '',
  
email char(150NOT NULL DEFAULT '',
  
issue char(150NOT NULL DEFAULT '',
  
message text NOT NULL,
  
ip char(20NOT NULL DEFAULT '',
  
user_agent char(200NOT NULL DEFAULT '',
  
moment datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  
message_status_id tinyint(3unsigned NOT NULL DEFAULT '0',
  
PRIMARY KEY (id),
  
FOREIGN KEY (message_status_idREFERENCES message_status(idON DELETE CASCADE ON UPDATE CASCADE
ENGINE=InnoDB DEFAULT CHARSET=utf8
Y estas son mis clases:
Código PHP:
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.JoinColumn;

import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

@
Entity
@Table(name="MESSAGES")
public class 
Message {
    
 @
Id
 
@GeneratedValue
 
@Column(name="id")
 private 
long id;

 @
Column(name="name"
 @
NotEmpty(message="El Nombre es obligatorio") @Size(min=3max=150message="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=3max=150message="El Asunto debe tener entre 3 y 150 caracteres"
 private 
String issue;
 
 @
Column(name="message")
 @
NotEmpty(message="El Mensaje es obligatorio") @Size(min=3max=150message="El Mensaje debe tener entre 3 y 150 caracteres")
 private 
String message;
 
 @
Column(name="ip")
 private 
String ip;
 
 @
Column(name="user_agent")
 private 
String user_agent;
 
 @
Column(name="moment")
 private 
Date moment;
 
 @
ManyToOne
 
@JoinColumn(name="message_status_id")
 private 
MessageStatus messagestatus;
 
 
/**
  * 
  */
 
public Message() {
        
 }
 
 
/**
  *    
  * @param id
  */
 
public Message(long id) {
  
this.setId(id);
 }
 
 
/**
  * 
  * @param id
  */
 
public void setId(long id) {
  
this.id id;
 }
 
 
/**
  * 
  * @return
  */
 
public long getId() {
  return 
id;
 }

 
/**
  * 
  * @param name
  */
 
public void setName(String name) {
  
this.name name;
 }

 
/**
  * 
  * @return
  */
 
public String getName() {
  return 
name;
 }

 
/**
  * 
  * @param email
  */
 
public void setEmail(String email) {
  
this.email email;
 }

 
/**
  * 
  * @return
  */
 
public String getEmail() {
  return 
email;
 }

 
/**
  * 
  * @param issue
  */
 
public void setIssue(String issue) {
  
this.issue issue;
 }

 
/**
  * 
  * @return
  */
 
public String getIssue() {
  return 
issue;
 }

 
/**
  * 
  * @param message
  */
 
public void setMessage(String message) {
  
this.message message;
 }

 
/**
  * 
  * @return
  */
 
public String getMessage() {
  return 
message;
 }

 
/**
  * 
  * @param ip
  */
 
public void setIp(String ip) {
  
this.ip ip;
 }

 
/**
  * 
  * @return
  */
 
public String getIp() {
  return 
ip;
 }

 
/**
  * 
  * @param user_agent
  */
 
public void setUser_agent(String user_agent) {
  
this.user_agent user_agent;
 }

 
/**
  * 
  * @return
  */
 
public String getUser_agent() {
  return 
user_agent;
 }

 
/**
  * 
  * @param moment
  */
 
public void setMoment(Date moment) {
  
this.moment moment;
 }

 
/**
  * 
  * @return
  */
 
public Date getMoment() {
  return 
moment;
 }

 
/**
  * 
  * @param messagestatus
  */
 
public void setMessagestatus(MessageStatus messagestatus) {
  
this.messagestatus messagestatus;
 }

 
/**
  * 
  * @return
  */
 
public MessageStatus getMessagestatus() {
  return 
messagestatus;
 }

}

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

@
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=3max=150message="El Nombre debe tener entre 3 y 150 caracteres")
 private 
String name

 public 
void setId(long id) {
  
this.id id;
 }

 public 
long getId() {
  return 
id;
 }

 public 
void setName(String name) {
  
this.name name;
 }

 public 
String getName() {
  return 
name;
 } 
Mi duda es como guardo el estado de un mensaje, como va a haber un número conocido de estados, tendría que recuperar por ejemplo el estado "No leído", asignarselo al nuevo mensaje y después guardarlo?? Que anotaciones uso de hibernate??

También he visto que hay relaciones bidireccionales, ¿en este caso no seria necesaria no?¿provocaría lentitud en la aplicación este tipo de relaciones?

Siento si estas dudas son muy triviales, es que estoy acostumbrado a venir de php, y con guardar el id de la foreign key me basta.

Etiquetas: anotaciones, clase, hibernate, relaciones, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:18.