Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/06/2012, 11:18
ajcremon
 
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