2017-07-06 2 views
0

Ich habe die unten Mitarbeiter und Abteilungen Klassen, wenn ich eine uni-direktionale Eins-zu-Eins-Zuordnung von Mitarbeitern zu Abteilungen Klasse funktioniert es gut, ich bekomme die Mitarbeiterdetails zusammen mit der AbteilungJPA eins zu eins bidirektionale Zuordnung funktioniert nicht

Detail
@Entity 
@Table(name="EMPLOYEES") 
public class Employees implements Serializable { 

@Id 
@Column(name="EMPLOYEE_ID") 
private Integer employee_id; 

@Column(name="FIRST_NAME") 
private String first_name; 

@Column(name="LAST_NAME") 
private String last_name; 

@Column(name="EMAIL") 
private String email; 

@Column(name="PHONE_NUMBER") 
private String phone_number; 

@Column(name="HIRE_DATE") 
private Date hire_date; 

@Column(name="JOB_ID") 
private String job_id; 

@Column(name="SALARY") 
private double salary; 


@Column(name="COMMISSION_PCT") 
private String commission_pct; 

@Column(name="MANAGER_ID") 
private String manager_id; 


@OneToOne 
@JoinColumn(name="department_id") 
private Departments departments; 

} 

für die obige Abbildung erhalte ich das Ergebnis richtig, aber wenn ich, wie unten das bidirektionale Mapping in Abteilungen Klasse setzte, Fehler immer beim Zugriff auf die Mitarbeiter

@Entity 
@Table(name="DEPARTMENTS") 
public class Departments { 
@Id 
@Column(name="DEPARTMENT_ID") 
private Integer department_id; 

@Column(name="DEPARTMENT_NAME") 
private String department_name; 

@Column(name="MANAGER_ID") 
private String manager_id; 

@Column(name="LOCATION_ID") 
private String location_id; 

@OneToOne(mappedBy="departments") 
private Employees employees; 

public Employees getEmployees() { 
    return employees; 
} 

} 

    org.hibernate.event.internal.DefaultLoadEventListener doOnLoad 
INFO: HHH000327: Error performing load command : org.hibernate.HibernateException: More than one row with the given identifier was found: 90, for class: com.example.demo.entity.Employees 

unterhalb der Code Zugang zum e itarbeiter

@RequestMapping(value="/getEmployees",method=RequestMethod.GET) 
public ResponseEntity<List<Employees>> getEmployees(){ 
    System.out.println("Employees are "); 
    List<Employees> employees =(List<Employees>) employeeRepo.findOne(new Integer(100)); 
    //System.out.println(employees.getDepartments()); 
    return new ResponseEntity(employees,HttpStatus.OK); 

} 

ähnlich unten ist der Code für retreiving die Abteilungen, die das gleiche Ergebnis (rekursive Ergebnisse) mehrere Male mit dem bidirektionalen Mapping geben

Code für den Zugriff auf die Abteilungen

@RequestMapping(value="/getDepartments",method=RequestMethod.GET) 
    public ResponseEntity<Departments> getDepartments(){ 
     System.out.println("Departments are "); 
     Departments dept = (Departments) departmentRepo.findOne(new Integer(10)); 

     return new ResponseEntity(dept,HttpStatus.OK); 

    } 

Bitte Jemand hilft mir dabei?

Antwort

1

Sie verwenden nicht die richtige Zuordnung. Es mag zwar stimmen, dass jeder Mitarbeiter nur eine Abteilung hat, jede Abteilung hat jedoch vermutlich mehr als einen Mitarbeiter. Daher der Fehler, den Sie in der Abfrage sehen. Es erwartet nur 1 Mitarbeiter, wurde aber mehrfach.

+0

meinst du eins zu eins Mapping sollte in diesem Fall nicht verwendet werden? – user1245524

+0

Ja, normalerweise sollten Sie eine 'OneToMany' auf der Abteilung und eine' ManyToOne' auf der Angestellten verwenden. Abhängig von Ihrer Organisationshierarchie können Sie sogar eine "ManyToMany" Zuordnung auf beiden haben. Zuletzt, wenn Sie nie von der Abteilungsseite zur Mitarbeiterseite gehen wollen, habe ich ein Mapping wie dieses mit einer unidirektionalen "OneToOne" gesehen, die nicht genau richtig ist, aber manchmal die sql erzeugt, die Sie wollen. –

Verwandte Themen