Как сделать это отображение спящего режима? - PullRequest
0 голосов
/ 29 ноября 2011

Я новичок в мире гибернации, поэтому запутался в написании файла сопоставления в следующих условиях.

У меня есть следующий класс, который я хочу сохранить с помощью hibernate:я уже создал следующие таблицы вручную в базе данных:

+---------------------------+
           project
+---------------------------+

 project_id (pk) | description
+---------------------------+

+---------------------------+    
          organizations
+---------------------------+
  org_id(pk)      | org_name
+---------------------------+

, чтобы связать organization и project таблицу, у меня есть следующие таблицы:

+-------------------------------------------------------------+
                      project_clients
+-------------------------------------------------------------+
  project_id(fk of projects)  | client_id(fk of organizations)
+-------------------------------------------------------------+

+-------------------------------------------------------------+
                     project_employers
+-------------------------------------------------------------+
  project_id(fk of projects) | employer_id(fk of organizations)
+-------------------------------------------------------------+

Понятия не имею, как сопоставить эти таблицы с моим project классом?Есть идеи, как это сделать?

Я пытался использовать преимущества списков, но с сохранением списков мы не можем использовать таблицу ссылок, например (project_clients или project_employers), и я не хочу создавать отдельный класс для списка клиентов и списка работодателей.Или это единственный вариант?

Пожалуйста, помогите!


РЕДАКТИРОВАТЬ 1 Спасибо, ребята, за ответы.У меня есть еще один запрос.Как сказать hibernate, что для клиента (например, «foo company») он должен искать «foo company» в таблице организаций и, если это имя присутствует, взять соответствующий идентификатор и поместить его в таблицу project_clients.Если в таблице «организации» нет «foo company», добавьте ее, а затем возьмите соответствующий идентификатор.Я хочу сделать то же самое и для работодателя.Можно ли сделать это в спящем режиме?

В настоящее время я написал программу на Java для всего этого.


Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Я думаю, что следующее отображение решит вашу проблему

  @Entity
  @Table(name="project")
  class Project {

    @Id
    @GeneratedValue
    int projectID;
    String description;
    //for joing the tables (many-to-many)
    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "project_clients",
    joinColumns = {
               @JoinColumn(name="projectId") 
             },
    inverseJoinColumns = {@JoinColumn(name="clientId")})

    private Set<Organization> clients;

   public Set<Organization> getClients(){ 
        return clients; 
   }
   public void setClients(Set<Organization> clients){ 
        this.clients= clients; 
   }

   //same for employers

   @ManyToMany(cascade=CascadeType.ALL)
   @JoinTable(name = "project_employers",
   joinColumns = {
               @JoinColumn(name="projectId") 
             },
   inverseJoinColumns = {@JoinColumn(name="employerId")})

   private Set<Organization> employers;

   public Set<Organization> getEmployers(){ 
        return employers; 
   }
   public void setEmployers(Set<Organization> employers){ 
        this.employers= employers; 
   }

}
0 голосов
/ 29 ноября 2011

Если вы ищете простой способ достичь желаемого:

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
class Project {
    @Id
    @GeneratedValue
    int projectID;
    @ElementCollection
    List<String> clients;
    @ElementCollection
    List<String> employers;
    @ElementCollection
    List<String> technologies;
    String description;
}

Обратите внимание, что @CollectionsOfElements устарела, поэтому лучше использовать @ ElementCollection

Дайте мне знать, если это работает для вас!

...