2013-04-04 138 views
0

首先,我有兩個實體文件夾和FolderObjectID及其相應的表。在複合鍵列上映射@OnetoOne

上的文件夾表I具有複合鍵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 
} 

現在我想有是兩個實體一對一的關係使用FolderID文件夾表的列將鏈接到FolderObjectID表的FolderObjectID列。不幸的是,我收到錯誤,說我在文件夾實體上有一列壞了。

有人可以在這個問題上給我啓發。 謝謝。

+0

是什麼在FolderObjectID表的主鍵?根據你的描述,它應該是folderId。所以先糾正一下,然後重新發布表結構和實體。 – JSS 2013-04-04 09:01:24

+0

FolderObjectID是主鍵。我有folderObjectId作爲它的屬性。 – 2013-04-04 09:40:18

回答

0

你想使用@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; 
} 
+0

我會試試這個。謝謝。 :) – 2013-04-05 00:30:36

+0

不幸的@MapsId不可用。我想即時通訊使用較低的版本。 – 2013-04-05 00:45:33

+0

你使用哪個版本? – 2013-04-05 10:17:19