Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Java 休眠:同一个表中的两个外键_Java_Hibernate - Fatal编程技术网

Java 休眠:同一个表中的两个外键

Java 休眠:同一个表中的两个外键,java,hibernate,Java,Hibernate,我有一个名为Stat的表和另一个名为Request的表,在请求表中我有属性:Old_Stat和New_Stat,它们都引用到同一个表Stat中。 但是当使用Hibernate在两个表之间建立关系时,我不知道如何告诉Hibernate这两个属性是同一个表Stat上的外键。 我希望有人能帮我解决这个问题 这是我的代码主张: @Entity public class Request implements Serializable{ @Id @GeneratedValue private Integer

我有一个名为Stat的表和另一个名为Request的表,在请求表中我有属性:Old_Stat和New_Stat,它们都引用到同一个表Stat中。 但是当使用Hibernate在两个表之间建立关系时,我不知道如何告诉Hibernate这两个属性是同一个表Stat上的外键。 我希望有人能帮我解决这个问题

这是我的代码主张:

@Entity
public class Request implements Serializable{
@Id @GeneratedValue
private Integer Request_id;
     ..... 

@ManyToOne
@JoinColumn(name = "stat_id")
private Stat stat_new;

@ManyToOne
@JoinColumn(name = "stat_id")
private Stat stat_old;
}
    /** in The Stat Class **/

@Entity
public class Stat implements Serializable{
@Id @GeneratedValue
private Integer stat_id;
   ..... 

@OneToMany(mappedBy = "stat_old",fetch = FetchType.LAZY)
private Collection<Request> requests;

@OneToMany(mappedBy = "stat_new",fetch = FetchType.LAZY)
private Collection<Request> requestss;
@实体
公共类请求实现可序列化{
@Id@GeneratedValue
私有整数请求\u id;
..... 
@许多酮
@JoinColumn(name=“stat\u id”)
私人统计局;
@许多酮
@JoinColumn(name=“stat\u id”)
私人统计局;
}
/**在统计类中**/
@实体
公共类Stat实现可序列化{
@Id@GeneratedValue
私有整数stat_id;
..... 
@OneToMany(mappedBy=“stat\u old”,fetch=FetchType.LAZY)
私人收集请求;
@OneToMany(mappedBy=“stat\u new”,fetch=FetchType.LAZY)
私人收集请求;

}

这是因为您试图加入
请求
实体中的
stat\u id
列,但该列不存在。即使是这样,如果一个列没有
updateable=false
insertable=false
,您也不能两次加入该列

最有可能的是,这将解决您的问题

@ManyToOne
@JoinColumn(name = "stat_new", referencedColumnName= "stat_id")
private Stat stat_new;

@ManyToOne
@JoinColumn(name = "stat_old", referencedColumnName= "stat_id")
private Stat stat_old;

这是因为您正试图加入
请求
实体中的
stat\u id
列,但该列不存在。即使是这样,如果一个列没有
updateable=false
insertable=false
,您也不能两次加入该列

最有可能的是,这将解决您的问题

@ManyToOne
@JoinColumn(name = "stat_new", referencedColumnName= "stat_id")
private Stat stat_new;

@ManyToOne
@JoinColumn(name = "stat_old", referencedColumnName= "stat_id")
private Stat stat_old;

否的可能重复,在他的例子中,它们是一个表作为父表,两个表作为子表,在我的例子中,我只有一个表。您的连接列都与@Jungkook提到的名称相同,您定义了两个同名的列“stat_id”。是的,这就是问题所在,它们引用的是同一个表,所以相同的Id。我需要其他建议。可能重复的否,在他的情况下,他们是一个表作为父表和两个表作为子表,在我的情况下,我只有一个表。你的连接列都有相同的名称作为@Jungkook提到的,你定义了两个同名的列“stat_Id”。是的,这是问题,他们引用的是同一张表,所以Id相同。我需要其他建议。