【问题标题】:Mapping @OnetoOne on composite key column在复合键列上映射 @OnetoOne
【发布时间】:2013-03-25 21:35:56
【问题描述】:

首先,我有两个实体文件夹和 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
}

可嵌入类

@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
}

现在我想要的是使用 Folder 表的 FolderID 列链接到 FolderObjectID 表的 FolderObjectID 列的两个实体上的一对一关系。不幸的是,我收到错误消息说我在文件夹实体上有一个损坏的列。

有人可以在这件事上启发我吗? 谢谢。

【问题讨论】:

  • FolderObjectID 表的主键是什么?根据您的描述,它应该是 folderId。所以先更正一下,然后重新发布表结构和实体。
  • FolderObjectID 是主键。我有 folderObjectId 作为它的属性。

标签: java hibernate jpa orm


【解决方案1】:

我猜你想使用@MapsId 功能。 与此类似,但我还没有尝试过:

文件夹实体

@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 {

   @Id
   private long folderObjectId;

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

【讨论】:

  • 我试试这个。谢谢。 :)
  • 很遗憾,@MapsId 不可用。我认为我使用的是较低版本。
猜你喜欢
  • 2021-07-13
  • 2020-03-18
  • 2021-03-15
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多