在java中实现一对一的关系

时间:2018-04-13 14:06:02

标签: java foreign-keys

我想出了一个示例,展示了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,但是有两点令我困惑:

  1. 如果两个或多个员工具有相同的EmployeeDetail(反之亦然),该怎么办?有没有办法在Java代码中处理这个问题,或者我只能在关系数据库管理系统中处理这个问题?

  2. 在SQL中,外键(ID)表示两个表之间的关系,但在上面的示例中,它们使用了类对象。请帮我解释一下

2 个答案:

答案 0 :(得分:0)

  1. one-to-one关系中,EmployeeDetail只能属于一个Employee。如果EmployeeDetail应该属于多个Employees,则需要Many-to-one关系(许多员工与一个员工明细)。

  2. 类对象记录外键的原因是,这很可能是Hibernate示例,它使用Java Objects进行数据库管理。 (即使它错过了一些明确的Hibernate示例的注释)

  3. 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();
    }
}