2014-08-21 2 views
0

Я пытаюсь понять, как работает JPA, сделав мой POC самостоятельно.Java EE с JPA, созданная странная база данных

Я создал некоторые объекты, которые что-то подобное:

@Entity 
@Table(name = "Employee") 
public class Employee implements Serializable { 

    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    private Long id; 

    private String firstName; 

    private String lastName; 

    @ManyToMany 
    @JoinTable(name="SKILLS_EMPLOYEES") 
    private List<Skill> skills; 

    @ManyToOne 
    private Company company; 


    public Employee() { 
    } 

    public Employee(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

//[..getters & setters...] 

    public void addSkill(Skill skill) { 
     this.skills.add(skill); 
     skill.addEmployee(this); 
    } 

    public void setCompany(Company company) { 
     this.company = company; 
     this.company.addEmployee(this); 
    } 

} 


@Entity 
@Table(name = "Company") 
public class Company implements Serializable { 

    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    private Long id; 

    private String companyName; 

    private List<Employee> employee; 

    public Company() { 
    } 

    public Company(String companyName) { 
     this.companyName = companyName; 
    } 

//[..getters & setters...] 

    public void setEmployee(List<Employee> employee) { 
     this.employee = employee; 
    } 

    public void addEmployee(Employee employee) { 
     this.employee.add(employee); 
    } 
} 

Таким образом, компания может иметь сотрудников, и работник может иметь только одну компанию, но в моей базе данных, glasshfish создал таблицу между сотрудником и компанией.

Сотрудник:

  • ID
  • FIRSTNAME
  • LASTNAME
  • company_id

Компания:

  • ID
  • COMPANYNAME

Company_Employee:

  • company_id
  • EMPLOYEE_ID

Что я сделал не так?

ответ

0

Вы забыли сказать, что JPA company.employees обратная сторона employee.company:

@OneToMany(mappedBy = "company") 
private List<Employee> employees; 

Обратите внимание, что я добавил s к имени поля. Это список сотрудников, поэтому их много.

+0

Спасибо! Это работает сейчас =) –