Я пытаюсь создать отношения «многие-ко-многим» между классами User
и FileObject
с допущением, что пользователь может получить доступ ко многим объектам файлов, а к файловому объекту могут обращаться многие пользователи и одно- to-many, поскольку один пользователь может владеть множеством файлов, но один файл может принадлежать только одному пользователю. Вот мой код:JPA Многие из многих отношений создают две таблицы вхождения
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public int id;
public String firstname;
public String lastname;
public String publicAttributes;
public String privateAttributes;
@ManyToOne
private Department department;
@OneToMany(mappedBy = "user")
public List<Device> devices = new ArrayList<Device>();
@OneToMany(mappedBy = "userCreator")
public List <FileObject> fileOwned = new ArrayList <FileObject>();
@ManyToMany
@JoinTable(name="USER_FILE_ACCESS")
public List<FileObject> fileHasAccess = new ArrayList<FileObject>();
}
@Entity
public class FileObject {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public int id;
String checksum;
@OneToMany(mappedBy = "fileObject")
public List<Policy> policies = new ArrayList<Policy>();
byte[] encryptedFileKey;
byte[] iv;
@ManyToOne
public User userCreator;
@ManyToMany
public List<User> listUserAccessor = new ArrayList<User>();
}
В теории он должен создать только один присоединиться таблицы, а именно USER_FILE_ACCESS, но когда я запускал скрипт, то он создает два объединения таблиц, и я не знаю, почему.
Вот выдержка из команд SQL:
show tables;
+------------------+
| Tables_in_cpabe |
+------------------+
| DEPARTMENT |
| DEVICE |
| FILEOBJECT |
| FILEOBJECT_USER |
| POLICY |
| SEQUENCE |
| USER |
| USER_FILE_ACCESS |
+------------------+
show columns from FILEOBJECT_USER;
+---------------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------+------+-----+---------+-------+
| FileObject_ID | int(11) | NO | PRI | NULL | |
| listUserAccessor_ID | int(11) | NO | PRI | NULL | |
+---------------------+---------+------+-----+---------+-------+
show columns from USER_FILE_ACCESS;
+------------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+-------+
| User_ID | int(11) | NO | PRI | NULL | |
| fileHasAccess_ID | int(11) | NO | PRI | NULL | |
+------------------+---------+------+-----+---------+-------+
Как сделать таблицу соединения быть только один стол?
Ваш второй @ManyToMany не имеет таблицы соединений/отображен. возможно, посмотрите на него – XtremeBaumer
@XtremeBaumer Я видел в некоторых примерах, доступных для другой стороны объединенной таблицы, мне не нужна эта аннотация CMIIW –