Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
在hibernate中,如何在具有复合键的两个表之间进行一一映射?_Hibernate_Jpa_Sybase_One To One_Joincolumn - Fatal编程技术网

在hibernate中,如何在具有复合键的两个表之间进行一一映射?

在hibernate中,如何在具有复合键的两个表之间进行一一映射?,hibernate,jpa,sybase,one-to-one,joincolumn,Hibernate,Jpa,Sybase,One To One,Joincolumn,我有两张桌子vanTb和Vansiteb。vanTb的主键是vId。vanSiteTb有一个由2列组成的复合主键,即。vNum和vSiteC vanTb还有两个柱vNum和vSiteC 这两个表之间存在一对一的关系 数据库架构来自旧数据库,因此无法更改 在hibernate中,我定义了两个实体bean,即。java和VanSiteTb.java 对于VanSiteTb.java,我使用@Embeddeble定义了一个新的java类。此类的对象在VanSiteTb.java中使用@Embedded

我有两张桌子vanTb和Vansiteb。vanTb的主键是vId。vanSiteTb有一个由2列组成的复合主键,即。vNum和vSiteC

vanTb还有两个柱vNum和vSiteC

这两个表之间存在一对一的关系

数据库架构来自旧数据库,因此无法更改

在hibernate中,我定义了两个实体bean,即。java和VanSiteTb.java

对于VanSiteTb.java,我使用@Embeddeble定义了一个新的java类。此类的对象在VanSiteTb.java中使用@EmbeddedId定义

现在,我想定义这两个表之间的一一关系

所以

上述查询将从两个表返回一个唯一的行

请告诉我解决方案。

要指定vanTb至vanSiteTb内的@OneTONE连接列,应为:

@JoinColumns({
  @JoinColumn(name = "vNum", referencedColumnName = "vNum"),
  @JoinColumn(name = "vSiteC", referencedColumnName = "vSiteC")
})
如果在vanSiteTb中有一列vanTab的主键vId,则应将其反向映射回vanTab,如下所示:

@JoinColumn(name = "vId", referencedColumnName = "vId")

请记住,name表示要在其中添加join column注释的实体的当前表中的列名,referencedColumnName表示关联实体表中的列名。

我是否还需要在vanSiteTb中写入@OneToOne?如果是,那么我还需要在vanSiteTb实体bean中定义一个属性vanTb,对吗?除非需要通过对象图遍历回vanTb,否则不需要在vanSiteTb中放置@OneToOne。
@JoinColumns({
  @JoinColumn(name = "vNum", referencedColumnName = "vNum"),
  @JoinColumn(name = "vSiteC", referencedColumnName = "vSiteC")
})
@JoinColumn(name = "vId", referencedColumnName = "vId")