Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Spring/Hibernate与额外列的一对一关系_Database_Spring_Hibernate_One To One - Fatal编程技术网

Database Spring/Hibernate与额外列的一对一关系

Database Spring/Hibernate与额外列的一对一关系,database,spring,hibernate,one-to-one,Database,Spring,Hibernate,One To One,在Spring/Hibernate中是否可以使用额外的列建立一对一的关系?如果是,我们怎么办?我想我必须使用联接表将两个实体链接在一起,然后在此联接表中添加一个额外的列,但我不知道如何进行 下面是一个代码示例,它对员工和工作站之间的关系进行了建模,它使用了@JoinTable,以便将关系保存在专用的联接表中。我想在此关系中添加一个额外的信息,例如,员工上次使用给定的工作站时,我将如何做到这一点 员工实体: @Entity @Table(name = "employee") public clas

在Spring/Hibernate中是否可以使用额外的列建立一对一的关系?如果是,我们怎么办?我想我必须使用联接表将两个实体链接在一起,然后在此联接表中添加一个额外的列,但我不知道如何进行

下面是一个代码示例,它对员工和工作站之间的关系进行了建模,它使用了
@JoinTable
,以便将关系保存在专用的联接表中。我想在此关系中添加一个额外的信息,例如,员工上次使用给定的工作站时,我将如何做到这一点

员工实体:

@Entity
@Table(name = "employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    //...

    @OneToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "emp_workstation", 
      joinColumns = { @JoinColumn(name = "employee_id", referencedColumnName = "id") },
      inverseJoinColumns = { @JoinColumn(name = "workstation_id", referencedColumnName = "id") })
    private WorkStation workStation;

    //... getters and setters
}
工作站实体:

@Entity
@Table(name = "workstation")
public class WorkStation {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    //...

    @OneToOne(mappedBy = "workStation")
    private Employee employee;

    //... getters and setters
}    

首先,我建议您改变员工和工作站之间的关系,创建一个@ManyToOne

一对一关系将一个表中的一条记录与另一个表中的一条记录关联起来

多对一关系将一个表中的多条记录与另一个表中的一条记录关联起来

然后,在以下情况下使用@ManyToOne:

  • 数据库中有许多工作站,用户可以访问 只有一个工作站
  • 员工可以使用不同的工作站(或同一工作站),但一次只能使用一个
根据关系中的附加数据问题,一对一应该返回实体中映射的所有数据


然后,如果您存储“员工上次使用给定工作站的时间”,这意味着您在“工作站”表中可能有一条以上的给定员工记录。

首先,我建议您更改员工和工作站之间的关系,以创建@ManyToOne

一对一关系将一个表中的一条记录与另一个表中的一条记录关联起来

多对一关系将一个表中的多条记录与另一个表中的一条记录关联起来

然后,在以下情况下使用@ManyToOne:

  • 数据库中有许多工作站,用户可以访问 只有一个工作站
  • 员工可以使用不同的工作站(或同一工作站),但一次只能使用一个
根据关系中的附加数据问题,一对一应该返回实体中映射的所有数据


然后,如果您存储“员工上次使用给定工作站的时间”,这意味着您在“工作站”表中可能有一条以上的给定员工记录。

Thanx为您的答案Thanx为您的答案

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(
        name = "workstation_id",
        foreignKey = @ForeignKey(name = "fk_workstation_id")
    )
    private WorkStation workStation;