如何进行hibernate映射?

如何进行hibernate映射?,hibernate,orm,mapping,hibernate-mapping,Hibernate,Orm,Mapping,Hibernate Mapping,我是hibernate world的新手,所以在以下条件下编写映射文件有点困惑 我想使用hibernate持久化以下类: class Project { int projectID; List<String> clients; List<String> employers; List<String> technologies; String description; } 要链接组织和项目表格,我有以下表格: +--

我是hibernate world的新手,所以在以下条件下编写映射文件有点困惑

我想使用hibernate持久化以下类:

class Project {
    int projectID;
    List<String> clients;
    List<String> employers;

    List<String> technologies;
    String description;
}

要链接
组织
项目
表格,我有以下表格:

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

我不知道如何将这些表映射到我的
项目
类?知道怎么做吗

我试图利用列表,但对于列表持久性,我们不能使用类似(
project\u clients
project\u employers
)的链接表,我不想为client list和employer list创建单独的类。还是这是唯一的选择

请帮忙


编辑1 谢谢你们的回答。我还有一个问题。如何告诉hibernate,对于客户端(例如“foo company”),它应该在organizations表中搜索“foo company”,如果该名称存在,则将其对应的ID放入project_clients表中。如果“组织”表中没有“foo company”,则添加它,然后获取其相应的ID。我也想为雇主做同样的事情。可以在hibernate中执行此操作吗

目前我已经用java编写了一个程序来完成这一切



如果您正在寻找一种直接的方法来实现您的目标:

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;
}
import javax.persistence.ElementCollection;
导入javax.persistence.Entity;
导入javax.persistence.GeneratedValue;
导入javax.persistence.Id;
@实体
班级项目{
@身份证
@生成值
整数投影;
@元素集合
列出客户名单;
@元素集合
列出雇主名单;
@元素集合
列出技术;
字符串描述;
}
注意@collectionsofements已被弃用,因此您最好使用@ElementCollection


让我知道它是否适合你

我认为下面的映射将解决您的问题

  @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; 
   }

}
@实体
@表(name=“项目”)
班级项目{
@身份证
@生成值
整数投影;
字符串描述;
//用于连接表(多对多)
@多个(级联=级联类型.ALL)
@JoinTable(name=“项目\客户”,
joinColumns={
@JoinColumn(name=“projectId”)
},
inverseJoinColumns={@JoinColumn(name=“clientId”)}
私人客户;
公共集getClients(){
返回客户;
}
public void setClients(Set clients){
这个。客户=客户;
}
//雇主亦一样
@多个(级联=级联类型.ALL)
@JoinTable(name=“项目雇主”,
joinColumns={
@JoinColumn(name=“projectId”)
},
inverseJoinColumns={@JoinColumn(name=“employerId”)}
私营雇主;
公共集getEmployers(){
返回雇主;
}
公共雇主(集合雇主){
这就是:雇主=雇主;
}
}

您好,谢谢您的回答。我有一个问题。如何告诉hibernate,对于客户端(例如“foo company”),它应该在organizations表中搜索“foo company”,如果该名称存在,则将其对应的ID放入project_clients表中。如果“组织”表中没有“foo company”,则添加它,然后获取其相应的ID。我也想为雇主做同样的事情。可以在hibernate中执行此操作吗?
+-------------------------------------------------------------+
                     project_employers
+-------------------------------------------------------------+
  project_id(fk of projects) | employer_id(fk of organizations)
+-------------------------------------------------------------+
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;
}
  @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; 
   }

}