Java 在复合键列上映射@OnetoOne

Java 在复合键列上映射@OnetoOne,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,首先,我有两个实体Folder和FolderObjectID及其对应的表 在文件夹表上,我有复合键FolderID和ParentFolderID Table Folder +----------------+ | Folder | +----------------+ |#FolderID | |#ParentFolderID | +----------------+ 在FolderObjectID表中,我将FolderObjectID作为主键 Table Fol

首先,我有两个实体Folder和FolderObjectID及其对应的表

在文件夹表上,我有复合键FolderID和ParentFolderID

Table Folder
+----------------+ 
|    Folder      |
+----------------+
|#FolderID       |
|#ParentFolderID |
+----------------+
在FolderObjectID表中,我将FolderObjectID作为主键

Table FolderObjectID
+----------------+
| FolderObjectID |
+----------------+
|#FolderObjectID |
+----------------+
文件夹实体

@Entity
@Table(name = "Folder")
public class Folder implements java.io.Serializable {

   private FolderId id;

   //setter getter
}
@Entity
@Table(name = "Folder")
public class Folder implements java.io.Serializable {

   @EmbeddedId
   private FolderId id;

   @OneToOne
   @MapsId("folderId")
   private FolderObject folderObject;
}
可嵌入类

@Embeddable
public class FolderId implements java.io.Serializable {

  private Integer folderId;
  private Integer parentFolderId;

  //setter getter
}
FolderObjectID实体

@Entity
@Table(name = "FolderObjectID")
public class FolderObjectID implements java.io.Serializable {

   private folderObjectId id;

   //setter getter
}
@Entity @Table(name = "FolderObjectID")
public class FolderObjectID implements java.io.Serializable {

   @Id
   private long folderObjectId;

   @OneToOne(mappedBy = "folderObject")
   @JoinColumn(name = "folderObjectId") 
   private Folder folder;
}
现在我想要的是两个实体上的一对一关系,使用Folder表的FolderID列链接FolderObjectID表的FolderObjectID列。不幸的是,我得到一个错误,说我在文件夹实体上有一个损坏的列

有人能在这件事上给我点化一下吗。
谢谢。

我想你想使用
@MapsId
功能。 与此类似,但我尚未尝试:

文件夹实体

@Entity
@Table(name = "Folder")
public class Folder implements java.io.Serializable {

   private FolderId id;

   //setter getter
}
@Entity
@Table(name = "Folder")
public class Folder implements java.io.Serializable {

   @EmbeddedId
   private FolderId id;

   @OneToOne
   @MapsId("folderId")
   private FolderObject folderObject;
}
FolderObjectID实体

@Entity
@Table(name = "FolderObjectID")
public class FolderObjectID implements java.io.Serializable {

   private folderObjectId id;

   //setter getter
}
@Entity @Table(name = "FolderObjectID")
public class FolderObjectID implements java.io.Serializable {

   @Id
   private long folderObjectId;

   @OneToOne(mappedBy = "folderObject")
   @JoinColumn(name = "folderObjectId") 
   private Folder folder;
}

FolderObjectID表中的主键是什么?根据你的描述,它应该是折叠的。因此,请先更正表结构,然后重新发布。FolderObjectID是主键。我有folderObjectId作为它的属性。我会试试这个。谢谢。:)很遗憾,@MapsId不可用。我想我用的是较低的版本。