如何进行hibernate映射?
我是hibernate world的新手,所以在以下条件下编写映射文件有点困惑 我想使用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; } 要链接组织和项目表格,我有以下表格: +--
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;
}
}