this tutorial
我用以下方式注释了字段:
class User {
@OneToMany
List<File> ownFiles;
@ElementCollection
Map<File, Integer> sharedFiles;
}
class File {
@ManyToOne
User author;
@ElementCollection
Map<User, Integer> sharedUsers;
}
更详细的信息:
class User {
@OneToMany
@JoinTable(name = "USER_HAS__OWN_FILES", joinColumns = {
@JoinColumn(name = "AUTHOR", referencedColumnName = "USERNAME")},
inverseJoinColumns = {@JoinColumn(name = "OWN_FILE_ID", referencedColumnName = "ID") })
List<File> ownFiles;
@ElementCollection
@CollectionTable(name = "USER_HAS_SHARED_FILES", joinColumns =
@JoinColumn(name = "USERNAME", referencedColumnName = "USERNAME"))
@MapKeyJoinColumn(name = "SHARED_FILE_ID", referencedColumnName = "ID")
@Column(name = "PERMISSION_LEVEL")
Map<File, Integer> sharedFiles;
}
class File {
@ManyToOne
@JoinColumn(name = "FILE_AUTHOR", referencedColumnName = "USERNAME")
User author;
@ElementCollection
@CollectionTable(name = "FILE_HAS_BEEN_SHARED_TO_USER",
joinColumns = @JoinColumn(name = "FILE_ID", referencedColumnName = "ID"))
@MapKeyJoinColumn(name = "USER_THAT_FILE_HAS_BEEN_SHARED_TO", referencedColumnName = "USERNAME")
@Column(name = "PERMISSION_LEVEL")
Map<User, Integer> sharedUsers;
}
现在它如我所料工作,生成了以下表格:
-
User (ID, Username, ...)
-
File (ID, Filename, Author, ...)
-
User_has_shared_files (Username, Shared_file_id, permission_level)
-
User_has__own_files (Username, Own_file_id)
-
File_has_been_shared_to_user (File_id, Username_id, permission_level)
@ElementCollection
注释对映射很有用
Java.Map<Entity, basicType>