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

Error común HIBERNATRE/JPA

Estas en el tema de Error común HIBERNATRE/JPA en el foro de Java en Foros del Web. Hola: He estado buscando una solución por Internet pero sólo las he encontrado en inglés y me ha costado entenderlas. Tengo cuatro clases relacionadas tal ...
  #1 (permalink)  
Antiguo 02/06/2012, 11:18
 
Fecha de Ingreso: diciembre-2010
Mensajes: 15
Antigüedad: 13 años, 4 meses
Puntos: 1
Error común HIBERNATRE/JPA

Hola:

He estado buscando una solución por Internet pero sólo las he encontrado en inglés y me ha costado entenderlas. Tengo cuatro clases relacionadas tal que así:
- Clase Issue.java
Código:


Código Java:
Ver original
  1. @Table(name = "table_issue")
  2. public class Issue implements IIssue {
  3.  
  4.     @Id
  5.     @GeneratedValue(strategy = GenerationType.AUTO)
  6.     @Column(name = "issueNumber", unique = true)
  7.     private int issueNumber;
  8.  
  9.     @Column(name = "name")
  10.     private String name;
  11.  
  12.     @Column(name = "email", unique = true)
  13.     private String email;
  14.  
  15.     @Column(name = "description")
  16.     private String description;
  17.  
  18.     @ManyToOne(cascade = CascadeType.PERSIST, targetEntity = Product.class)
  19.     @JoinColumn(name = "code_p")
  20.     private IProduct product;
  21.  
  22.     @ManyToOne(cascade = CascadeType.PERSIST, targetEntity = MaintenanceProcedure.class)
  23.     @JoinColumn(name = "code_mp")
  24.     private IMaintenanceProcedure maintenanceProcedure;
  25.  
  26.     @ManyToOne(cascade = CascadeType.PERSIST, targetEntity = Technician.class)
  27.     @JoinColumn(name = "technicianNumber")
  28.     private ITechnician technician;
  29.  
  30.     @Column(name = "response")
  31.     private String response;
  32.  
  33.     @Column(name = "punctuation")
  34.     private int punctuation;
  35.  
  36.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  37.     @JoinColumn(name = "issueNumber")
  38.     private Set<IIssue> recordList = new HashSet<IIssue>();
(...)
- Clase MaintenaceProcedure

Código:


Código Java:
Ver original
  1. @Table(name = "table_maintenanceProcedure")
  2. public class MaintenanceProcedure implements IMaintenanceProcedure {
  3.  
  4.     @Id
  5.     @GeneratedValue(strategy = GenerationType.AUTO)
  6.     @Column(name = "code_mp", unique = true)
  7.     private int code_mp;
  8.  
  9.     @Column(name = "name", unique = true)
  10.     private String name;
  11.  
  12.     @Column(name = "description")
  13.     private String description;
  14.  
  15.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = Product.class)
  16.     @JoinColumn(name = "code_p")
  17.     private Set<IProduct> productList = new HashSet<IProduct>();
  18.  
  19.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = Technician.class)
  20.     @JoinColumn(name = "technicianNumber")
  21.     private Set<ITechnician> technicianList = new HashSet<ITechnician>();
  22.  
  23.     @OneToMany(mappedBy = "issueNumber", cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  24.     private Set<IIssue> issueList = new HashSet<IIssue>();
(...)
- Clase Technician
Código:


Código Java:
Ver original
  1. @Table(name = "table_technician")
  2. public class Technician implements ITechnician {
  3.  
  4.     @Id
  5.     @GeneratedValue(strategy = GenerationType.AUTO)
  6.     @Column(name = "technicianNumber", unique = true)
  7.     private int technicianNumber;
  8.  
  9.     @Column(name = "email", unique = true)
  10.     private String email;
  11.  
  12.     @Column(name = "password")
  13.     private String password;
  14.  
  15.     @Column(name = "name")
  16.     private String name;
  17.  
  18.     @Column(name = "lastname")
  19.     private String lastname;
  20.  
  21.     @Column(name = "city")
  22.     private String city;
  23.  
  24.     @Column(name = "country")
  25.     private String country;
  26.  
  27.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = MaintenanceProcedure.class)
  28.     @JoinColumn(name = "code_mp")
  29.     private Set<IMaintenanceProcedure> maintenanceProcedureList;
  30.  
  31.     @OneToMany(mappedBy = "issueNumber", cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  32.     private Set<IIssue> issueList;
(...)
- Clase Product
Código:


Código Java:
Ver original
  1. @Table(name = "table_product")
  2. public class Product implements IProduct {
  3.  
  4.     @Id
  5.     @GeneratedValue(strategy = GenerationType.AUTO)
  6.     @Column(name = "code_p", unique = true)
  7.     private int code_p;
  8.  
  9.     @Column(name = "name", unique = true)
  10.     private String name;
  11.  
  12.     @Column(name = "description")
  13.     private String description;
  14.  
  15.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = MaintenanceProcedure.class)
  16.     @JoinColumn(name = "code_mp")
  17.     private Set<IMaintenanceProcedure> maintenanceProcedureList;
  18.  
  19.     @OneToMany(mappedBy = "issueNumber", cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  20.     private Set<IIssue> issueList;
  21. (...)
Estas clases se relacionan tal que así:

(todas bidireccionales)

Issue 0..* ----- 0..* Issue
Issue 0..* ----- 1 Product
Issue 0..* ----- 1 MaintenanceProcedure
Issue 0..* ----- 1 Technician
Product 1..* ----- 1..* MaintenanceProcedure
Technician 0..* ----- 1..10 MaintenanceProcedure

El problema es el siguiente. Al insertar un objeto de tipo Issue en la base de datos, me sale este error:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Cannot add or update a child row: a foreign key constraint fails (`acmedb`.`table_issue`, CONSTRAINT `FK2395B528A0E34810` FOREIGN KEY (`issueNumber`) REFERENCES `table_technician` (`technicianNumber`))

¿Qué es lo que falla entre las relaciones? Muchas gracias y un saludo
  #2 (permalink)  
Antiguo 02/06/2012, 11:45
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Error común HIBERNATRE/JPA

Que codigo estas usando para insertar el objeto tipo Issue?

Tambien arregla las etiquetas del codigo, es incomodo leerlo como esta.
  #3 (permalink)  
Antiguo 02/06/2012, 13:18
 
Fecha de Ingreso: diciembre-2010
Mensajes: 15
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Error común HIBERNATRE/JPA

Hola:

Para insertar el objeto Issue uso el siguiente código:

Código C:
Ver original
  1. IssueService is = new IssueService();
  2.        
  3. Issue i1 = new Issue();
  4.        
  5. is.add(i1);

- Clase Issue

Código C:
Ver original
  1. @Entity
  2. @Table(name = "table_issue")
  3. public class Issue implements IIssue {
  4.  
  5.     @Id
  6.     @GeneratedValue(strategy = GenerationType.AUTO)
  7.     @Column(name = "issueNumber", unique = true)
  8.     private int issueNumber;
  9.  
  10.     @Column(name = "name")
  11.     private String name;
  12.  
  13.     @Column(name = "email", unique = true)
  14.     private String email;
  15.  
  16.     @Column(name = "description")
  17.     private String description;
  18.  
  19.     @ManyToOne(cascade = CascadeType.PERSIST, targetEntity = Product.class)
  20.     @JoinColumn(name = "code_p")
  21.     private IProduct product;
  22.  
  23.     @ManyToOne(cascade = CascadeType.PERSIST, targetEntity = MaintenanceProcedure.class)
  24.     @JoinColumn(name = "code_mp")
  25.     private IMaintenanceProcedure maintenanceProcedure;
  26.  
  27.     @ManyToOne(cascade = CascadeType.PERSIST, targetEntity = Technician.class)
  28.     @JoinColumn(name = "technicianNumber")
  29.     private ITechnician technician;
  30.  
  31.     @Column(name = "response")
  32.     private String response;
  33.  
  34.     @Column(name = "punctuation")
  35.     private int punctuation;
  36.  
  37.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  38.     @JoinColumn(name = "issueNumber")
  39.     private Set<IIssue> recordList = new HashSet<IIssue>();
  40.  
  41. (...)



- Clase MaintenaceProcedure


Código C:
Ver original
  1. @Entity
  2. @Table(name = "table_maintenanceProcedure")
  3. public class MaintenanceProcedure implements IMaintenanceProcedure {
  4.  
  5.     @Id
  6.     @GeneratedValue(strategy = GenerationType.AUTO)
  7.     @Column(name = "code_mp", unique = true)
  8.     private int code_mp;
  9.  
  10.     @Column(name = "name", unique = true)
  11.     private String name;
  12.  
  13.     @Column(name = "description")
  14.     private String description;
  15.  
  16.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = Product.class)
  17.     @JoinColumn(name = "code_p")
  18.     private Set<IProduct> productList = new HashSet<IProduct>();
  19.  
  20.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = Technician.class)
  21.     @JoinColumn(name = "technicianNumber")
  22.     private Set<ITechnician> technicianList = new HashSet<ITechnician>();
  23.  
  24.     @OneToMany(mappedBy = "issueNumber", cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  25.     private Set<IIssue> issueList = new HashSet<IIssue>();
  26.  
  27. (...)


- Clase Technician
Código C:
Ver original
  1. @Entity
  2. @Table(name = "table_technician")
  3. public class Technician implements ITechnician {
  4.  
  5.     @Id
  6.     @GeneratedValue(strategy = GenerationType.AUTO)
  7.     @Column(name = "technicianNumber", unique = true)
  8.     private int technicianNumber;
  9.  
  10.     @Column(name = "email", unique = true)
  11.     private String email;
  12.  
  13.     @Column(name = "password")
  14.     private String password;
  15.  
  16.     @Column(name = "name")
  17.     private String name;
  18.  
  19.     @Column(name = "lastname")
  20.     private String lastname;
  21.  
  22.     @Column(name = "city")
  23.     private String city;
  24.  
  25.     @Column(name = "country")
  26.     private String country;
  27.  
  28.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = MaintenanceProcedure.class)
  29.     @JoinColumn(name = "code_mp")
  30.     private Set<IMaintenanceProcedure> maintenanceProcedureList;
  31.  
  32.     @OneToMany(mappedBy = "issueNumber", cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  33.     private Set<IIssue> issueList;
  34.  
  35. (...)


- Clase Product
Código C:
Ver original
  1. @Entity
  2. @Table(name = "table_product")
  3. public class Product implements IProduct {
  4.  
  5.     @Id
  6.     @GeneratedValue(strategy = GenerationType.AUTO)
  7.     @Column(name = "code_p", unique = true)
  8.     private int code_p;
  9.  
  10.     @Column(name = "name", unique = true)
  11.     private String name;
  12.  
  13.     @Column(name = "description")
  14.     private String description;
  15.  
  16.     @ManyToMany(cascade = CascadeType.PERSIST, targetEntity = MaintenanceProcedure.class)
  17.     @JoinColumn(name = "code_mp")
  18.     private Set<IMaintenanceProcedure> maintenanceProcedureList;
  19.  
  20.     @OneToMany(mappedBy = "issueNumber", cascade = CascadeType.PERSIST, targetEntity = Issue.class)
  21.     private Set<IIssue> issueList;
  22. (...)
  #4 (permalink)  
Antiguo 02/06/2012, 13:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 15
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Error común HIBERNATRE/JPA

Le he puesto etiquetas de código C aunque es Java

Etiquetas: clase, mysql, 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 17:05.