title: Understanding annotations and JPA(hibernate)
body: <p>There is a structure. I want to link the three entities in this way:  the Company should contain id, name of company and  the list of Departments, each Department has a list of Workers, id and name of department. Each worker has name, id.</p>
  
  <pre><code>+Company
  -int companyId
  -String companyName
  -Set&lt;Department&gt; listOfDepartments = new HashSet&lt;Department&gt;();
  
  +Department
  -int departmentId
  -String departmentName
  -Set&lt;Worker&gt; listOfWorkers = new HashSet&lt;Worker&gt;();
  
  +Worker
  -int workerId
  -String workerName
  </code></pre>
  
  <p>I tried to make a connection with the one-to-many and many-to-one, but is not successful.</p>
  
  <p>Сompany</p>
  
  <pre><code>@Entity
  @Table(name="Company")
  public class Company {
  
  @Id @GeneratedValue(strategy = GenerationType.AUTO)
  private int idCompany;
  private String companyName;
  
  @OneToMany(mappedBy = "company")
  private Set&lt;Department&gt; listOfDepartments = new HashSet&lt;Department&gt;();
  </code></pre>
  
  <p>Department</p>
  
  <pre><code>@Entity
  public class Department {
  
  @Id @GeneratedValue(strategy = GenerationType.AUTO)
  private int idDepartment;
  private String departmentName;
  
  @ManyToOne
  @JoinColumn(name="idCompany")
  private Company company;
  
  @OneToMany(mappedBy = "department")
  private Set&lt;Worker&gt; listOfWorkers = new HashSet&lt;Worker&gt;();
  </code></pre>
  
  <p>Worker</p>
  
  <pre><code>@Entity
  public class Worker {
  
  @Id @GeneratedValue(strategy = GenerationType.AUTO)
  private int idWorker;
  private String workerName;
  
  @ManyToOne
  @JoinColumn(name="idDepartment")
  </code></pre>
  
  <p>I start with:</p>
  
  <pre><code>Session session = sessionFactory.openSession();
          session.beginTransaction();
          Worker worker1 = new Worker("WorkerName1");
          Worker worker2 = new Worker("WorkerName2");
          Worker worker3 = new Worker("WorkerName3");
          Worker worker4 = new Worker("WorkerName4");
          Department department = new Department("Technical");
          department.getListOfWorkers().add(worker1);
          department.getListOfWorkers().add(worker2);
          department.getListOfWorkers().add(worker3);
          department.getListOfWorkers().add(worker4);
          company = new Company("MyCompanyName");
          company.getListOfDepartments().add(department);
          session.save(company);
          session.getTransaction().commit();
          session.close();
  </code></pre>
  
  <p>It fills company, but not fills other tables and also it's not creating any joins(maps)
  Error:</p>
  
  <pre><code>Hibernate: alter table Department drop foreign key FK_l7sg67atqhnn0soqynpvxrtpk
  Hibernate: alter table Worker drop foreign key FK_s53hyohtyjy93srd2wkksairk
  Hibernate: drop table if exists Company
  Hibernate: drop table if exists Department
  Hibernate: drop table if exists Worker
  Hibernate: create table Company (idCompany integer not null auto_increment, companyName varchar(255), primary key (idCompany))
  Hibernate: create table Department (idDepartment integer not null auto_increment, departmentName varchar(255), idCompany integer, primary key (idDepartment))
  Hibernate: create table Worker (idWorker integer not null auto_increment, workerName varchar(255), idDepartment integer, primary key (idWorker))
  Hibernate: alter table Department add index FK_l7sg67atqhnn0soqynpvxrtpk (idCompany), add constraint FK_l7sg67atqhnn0soqynpvxrtpk foreign key (idCompany) references Company (idCompany)
  Hibernate: alter table Worker add index FK_s53hyohtyjy93srd2wkksairk (idDepartment), add constraint FK_s53hyohtyjy93srd2wkksairk foreign key (idDepartment) references Department (idDepartment)
  ноя 11, 2013 3:10:31 AM org.hibernate.tool.hbm2ddl.SchemaExport execute
  INFO: HHH000230: Schema export complete
  Hibernate: insert into Company (companyName) values (?)
  </code></pre>