我想出了一个示例,展示了Employee类和EmployeeDetail类之间的一对一关系:
public class Employee {
private Long empId;
private String name;
private EmployeeDetail employeeDetail;
//gettter and setter
}
public class EmployeeDetail{
private Long empDetailsId;
private String empFullName;
private String empMailId;
private Employee employee;
//getter and setter..
}
在Employee类中,有一个EmployeeDetail字段,在EmployeeDetail类中,有一个Employee字段。我理解,因为每个Employee都有自己的EmployeeDetail,而每个EmployeeDetail只属于一个Employee,但是有两点令我困惑:
如果两个或多个员工具有相同的EmployeeDetail(反之亦然),该怎么办?有没有办法在Java代码中处理这个问题,或者我只能在关系数据库管理系统中处理这个问题?
在SQL中,外键(ID)表示两个表之间的关系,但在上面的示例中,它们使用了类对象。请帮我解释一下
答案 0 :(得分:0)
在one-to-one
关系中,EmployeeDetail
只能属于一个Employee
。如果EmployeeDetail
应该属于多个Employees
,则需要Many-to-one
关系(许多员工与一个员工明细)。
类对象记录外键的原因是,这很可能是Hibernate
示例,它使用Java Objects
进行数据库管理。 (即使它错过了一些明确的Hibernate
示例的注释)
Here你可以找到关于Hibernate和数据库关系的例子
答案 1 :(得分:0)
看看这个例子:
@Entity
@Table(name="d_agent_auth")
public class AgentAuth implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idAuth;
@NotNull
private String password;
private Date dateCreation;
@OneToOne
@JoinColumn(name="code_agent")
private Agent agent;
public AgentAuth() {
super();
}
}
有一种可导航的感觉和两种感觉,在agent
课程中你不会找到关键参考agentAuth
或两种敏感意味着在您会找到agent
:
@Entity
@Table(name="d_agent")
public class Agent implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String codeAgent;
@ManyToMany(mappedBy="DAgents", cascade=CascadeType.MERGE)
private List<Profil> profil;
@OneToMany(mappedBy="DAgent")
private List<SuiviDossier> DSuiviDossiers;
@OneToMany(mappedBy="DAgent")
private List<SuiviLot> suiviLots;
@OneToMany(mappedBy="agent")
private List<Affectation> affecter;
public Agent() {
super();
}
}