具有两个FK的实体到同一实体

时间:2019-02-18 07:28:27

标签: java spring hibernate

我正在建立一个约会系统,并且在mysql结构和模型结构方面存在一些问题。用户将至少有两种:客户和提供者。客户将与该工作的可用提供者预约该选定的工作。供应商将能够添加他们自己以选择可供客户使用的工作。最后,将进行约会,包括开始日期,结束日期以及对customer_id和provider_id(来自表用户)和work_id(来自表工作)的外键。因此,在约会表中,我将向同一实体(用户)提供2个FK,但一个将成为客户,一个将成为提供商。 哪些映射应在约会类中具有用户和客户字段,而在用户类中具有字段约会?我将通过users_role表中的角色来区分用户。 甚至可以只为用户提供一个公用表吗?

这是mysql模式的链接:https://i.imgur.com/OdKfVdh.png

Appointment.class

import subprocess
import re
from pandas import parser

try:
  filename='mydata.tsv'
  df=pd.read_csv(filename,sep='\t',header=0, skiprows=[1,2,3])
except (parser.CParserError) as detail:
  print  detail
  err=re.findall(r'\b\d+\b', detail) #will give all the numbers ['22', '329867', '24'] line number is at index 1
  line=subprocess.check_output("sed -n %s %s" %(str(err[1])+'p',filename),stderr=subprocess.STDOUT,shell=True) # shell command 'sed -n 2p filename'  for printing line 2 of filename
  print 'Bad line'
  print line # to see line 

User.class:

@Entity
@Table(name="appointments")
public class Appointment extends BaseEntity {

    @Column(name="start")
    @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm")
    private LocalDateTime start;

    @DateTimeFormat(pattern="yyyy-MM-dd'T'hh:mm")
    @Column(name="end")
    private LocalDateTime end;

    @ManyToOne
    @JoinColumn(name="work_id")
    private Work work;

    ??????
    private User customer; 

    ??????
    private User provider;
}

1 个答案:

答案 0 :(得分:0)

您只需要指定列名:

@OneToMany    
@JoinColumn(name = "first_column")
private User customer; 

@OneToMany    
@JoinColumn(name = "second_column")
private User user;

关于父母的补贴是指孩子:

@ManyToOne(mappedBy = "user")
private List<Appointment> appointmentsByUser;

@ManyToOne(mappedBy = "customer")
private List<Appointment> appointmentsByProvider;