2013-04-04 132 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